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;