如何在C# ASP.NET中的GridView RowDataBound事件中创建按钮点击事件

4
我正在尝试在C# ASP.NET的RowDataBound中创建按钮和点击事件,就像下面的代码一样:
 protected void btnerror_Click(object sender, EventArgs e)
{
         GridView gv = new GridView();
        gv.RowDataBound += gv_RowDataBound;
        gv.RowCommand += gv_RowCommand;
        gv.RowCreated += gv_RowCreated;

        gv.EnableViewState = true;

        gv.DataSource = _dt;
        gv.DataBind();
}


void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        ImageButton btnUpdate = new ImageButton();

        btnUpdate.ID = "btnupdate";
        btnUpdate.ImageUrl = "~/SmartAdmin/Images/update.png";
        btnUpdate.ToolTip = "Click Update";
        btnUpdate.CommandName = "update";


        btnUpdate.Click += btnUpdate_Click;

        TableCell tc = new TableCell();

        tc.Controls.Add(btnUpdate);
        e.Row.Cells.Add(tc);

    }
}


void gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "update")
    {

    }
}

当点击按钮时,点击事件没有触发...

我错在哪里了...

谢谢......


你真的想要手动创建 GridView 吗?我非常怀疑。相反,将其添加到 aspx 中,并在 btnerror_Click 中使其可见。 - Tim Schmelter
2个回答

5

您真的想手动创建 GridView 吗?我非常怀疑。相反,在 aspx 页面中以声明方式添加它,并在 btnerror_Click 中使其可见。

不要动态创建控件并在 RowDataBound 中注册事件处理程序,而应在 RowCreated 中注册,在每次 postback 时触发(与 RowDataBound 相反):

void gv_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ImageButton btnUpdate = new ImageButton();
        btnUpdate.Click += btnUpdate_Click;
        TableCell tc = new TableCell();

        tc.Controls.Add(btnUpdate);
        e.Row.Cells.Add(tc);
    }
}

void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {    
        ImageButton btnUpdate = (ImageButton)e.Row.FindControls("btnupdate") 
        btnUpdate.ID = "btnupdate";
        btnUpdate.ImageUrl = "~/SmartAdmin/Images/update.png";
        btnUpdate.ToolTip = "Click Update";
        btnUpdate.CommandName = "update";
    }
}

因此,在RowCreated中创建它,但在RowDataBound中初始化它,您也可以在那里访问数据源(如果需要)。

还要注意,您应该仅在if(!IsPostBack)而不是在每个postback上DataBind GridView(如果是这种情况)。因此,在分配数据源时添加此检查。


0

你需要为点击事件添加函数

btnUpdate.Click += btnUpdate_Click;

protected void btnUpdate_Click(object sender, EventArgs e)
{

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接