asp.net 设置命令参数
asp.net set command argument
我正在使用 OnRowDataBound 自动向我的网格视图添加一个 link 按钮,如下所示。我遇到的问题是设置命令参数。
<asp:LinkButton ID = "lnkDelete" Text = "Delete" CommandArgument = '<%# Eval("Value") %>' runat = "server" OnClick = "DeleteFile" />
下面是添加 link 的代码。我将命令参数设置为 Eval("Value") 但这不起作用。 Here is a link to the original code that I'm trying to change so it is dynamic.
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lnkView = new LinkButton();
lnkView.ID = "lnkDelete";
lnkView.Text = "Delete";
lnkView.Click += DeleteFile;
lnkView.CommandArgument = Eval("Value");
e.Row.Cells[1].Controls.Add(lnkView);
}
RowDataBound
不是动态添加控件的正确事件,因为它们需要在每次连续回发时重新创建。 RowDataBound
仅在您调用 GridView.DataBind()
时触发。
因此请改用 RowCreated
,但在 RowDataBound
中分配 CommandArgument
值,不要使用 Eval("Value")
,而是使用从 [=19 获得的实际数据源=].
像这样的东西应该可以工作:
protected void OnRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lnkView = new LinkButton();
lnkView.ID = "lnkDelete";
lnkView.Text = "Delete";
lnkView.Click += DeleteFile;
e.Row.Cells[1].Controls.Add(lnkView);
}
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lnkView = (LinkButton)e.Row.FindControl("lnkDelete");
var rowView = (DataRowView)e.Row.DataItem;
lnkView.CommandArgument = rowView.Row.Field<string>("Value");
}
}
如果这在运行时抛出异常,您需要将 (DataRowView)e.Row.DataItem
更改为您可以从调试器获取的实际数据源。
编辑:如评论所述,它是 ListItem
,而您想使用它 Value
属性:
var item = (ListItem) e.Row.DataItem;
lnkView.CommandArgument = item.Value;
我正在使用 OnRowDataBound 自动向我的网格视图添加一个 link 按钮,如下所示。我遇到的问题是设置命令参数。
<asp:LinkButton ID = "lnkDelete" Text = "Delete" CommandArgument = '<%# Eval("Value") %>' runat = "server" OnClick = "DeleteFile" />
下面是添加 link 的代码。我将命令参数设置为 Eval("Value") 但这不起作用。 Here is a link to the original code that I'm trying to change so it is dynamic.
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lnkView = new LinkButton();
lnkView.ID = "lnkDelete";
lnkView.Text = "Delete";
lnkView.Click += DeleteFile;
lnkView.CommandArgument = Eval("Value");
e.Row.Cells[1].Controls.Add(lnkView);
}
RowDataBound
不是动态添加控件的正确事件,因为它们需要在每次连续回发时重新创建。 RowDataBound
仅在您调用 GridView.DataBind()
时触发。
因此请改用 RowCreated
,但在 RowDataBound
中分配 CommandArgument
值,不要使用 Eval("Value")
,而是使用从 [=19 获得的实际数据源=].
像这样的东西应该可以工作:
protected void OnRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lnkView = new LinkButton();
lnkView.ID = "lnkDelete";
lnkView.Text = "Delete";
lnkView.Click += DeleteFile;
e.Row.Cells[1].Controls.Add(lnkView);
}
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lnkView = (LinkButton)e.Row.FindControl("lnkDelete");
var rowView = (DataRowView)e.Row.DataItem;
lnkView.CommandArgument = rowView.Row.Field<string>("Value");
}
}
如果这在运行时抛出异常,您需要将 (DataRowView)e.Row.DataItem
更改为您可以从调试器获取的实际数据源。
编辑:如评论所述,它是 ListItem
,而您想使用它 Value
属性:
var item = (ListItem) e.Row.DataItem;
lnkView.CommandArgument = item.Value;