asp.net set命令参数

时间:2015-01-27 10:48:26

标签: asp.net commandargument

我正在使用OnRowDataBound自动添加一个链接按钮到我看来是这样的网格视图。我遇到的问题是设置命令参数。

<asp:LinkButton ID = "lnkDelete" Text = "Delete" CommandArgument = '<%# Eval("Value") %>' runat = "server" OnClick = "DeleteFile" />

以下是添加链接的代码。我将命令参数设置为Eval(&#34; Value&#34;),但这不起作用。 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);
    }

1 个答案:

答案 0 :(得分:1)

RowDataBound不是动态添加控件的正确事件,因为需要在每次连续回发时重新创建它们。只有在您拨打RowDataBound时才会触发GridView.DataBind()

所以请改用RowCreated,但在CommandArgument中分配RowDataBound值,不要使用Eval("Value"),而是使用e.Row.DataItem获得的实际数据源

这样的事情应该有效:

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;