如何在 gridview RowDataBound 中创建按钮单击事件 c# asp.net
how to create button click event in gridview RowDataBound c# asp.net
我正在尝试在 gridview 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")
{
}
}
点击时按钮点击事件没有触发...
哪里出错了...
谢谢你......
点击事件需要添加函数
btnUpdate.Click += btnUpdate_Click;
protected void btnUpdate_Click(object sender, EventArgs e)
{
}
您真的要手动创建 GridView
吗?我对此深表怀疑。而是以声明方式将其添加到 aspx 页面并使其在 btnerror_Click
.
中可见
不要动态创建控件并在 RowDataBound
中注册事件处理程序,而是在每次回发时触发的 RowCreated
中注册(与 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
中初始化它,您还可以在其中访问数据源(如果需要)。
另请注意,您应该 DataBind
仅 GridView
if(!IsPostBack)
而不是在每个回传中(如果是这样的话)。因此,在分配数据源的位置添加此检查。
我正在尝试在 gridview 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")
{
}
}
点击时按钮点击事件没有触发...
哪里出错了...
谢谢你......
点击事件需要添加函数
btnUpdate.Click += btnUpdate_Click;
protected void btnUpdate_Click(object sender, EventArgs e)
{
}
您真的要手动创建 GridView
吗?我对此深表怀疑。而是以声明方式将其添加到 aspx 页面并使其在 btnerror_Click
.
不要动态创建控件并在 RowDataBound
中注册事件处理程序,而是在每次回发时触发的 RowCreated
中注册(与 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
中初始化它,您还可以在其中访问数据源(如果需要)。
另请注意,您应该 DataBind
仅 GridView
if(!IsPostBack)
而不是在每个回传中(如果是这样的话)。因此,在分配数据源的位置添加此检查。