我以编程方式创建按钮,我放置在一个表内,我希望添加一个点击事件的按钮,但失败了
本文关键字:一个 按钮 添加 事件 失败 我希望 创建 方式 编程 | 更新日期: 2023-09-27 18:16:46
我的问题-=>当我点击按钮,页面只是刷新和按钮消失了。我想要的是当我点击按钮时,我可以识别按钮ID并显示消息。
My GridView Code -
protected void initData()
{
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("Button", typeof(Button));
dt.Columns.Add(dc1);
Button btn = new Button();
btn.ID = "Testing";
btn.Text = "Testing";
btn.Click +=btn_Click;
DataRow dr = dt.NewRow();
dr["Button"] = btn;
dt.Rows.Add(dr);
foreach (DataColumn col in dt.Columns)
{
BoundField bField = new BoundField();
bField.DataField = col.ColumnName;
bField.HeaderText = col.ColumnName;
gvTest.Columns.Add(bField);
}
gvTest.DataSource = dt;
gvTest.DataBind();
}
我的代码如下-
protected void initData()
{
var data = db.Courses;
TableRow tr = new TableRow();
TableCell tc = new TableCell();
Button btn = new Button();
btn.Text = "Testing";
btn.ID = "Testing";
btn.Click += btn_Click;
tc.Controls.Add(btn);
tr.Cells.Add(tc);
tbTest.Rows.Add(tr);
}
protected void btn_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
Response.Write(btn.ID);
}
是否考虑过使用网格控件:
http://msdn.microsoft.com/en-us/library/vstudio/bb907626 (v = vs.100) . aspx
这样,你就不用写HTML了。
protected void GridView1_RowCommand(object sender,
GridViewCommandEventArgs e)
{
if (e.CommandName == "AddToCart")
{
// Retrieve the row index stored in the
// CommandArgument property.
int index = Convert.ToInt32(e.CommandArgument);
// Retrieve the row that contains the button
// from the Rows collection.
GridViewRow row = GridView1.Rows[index];
// Add code here to add the item to the shopping cart.
}
}
在没有看到所有代码的情况下很难说,但动态添加控件几乎总是一个PITA。你必须绝对确定的一件事是你正在重新创建回发控件。为了使事件和视图状态正常工作,整个控件树必须是相同的。所以你需要尽可能早地调用initData(),你也必须为回发调用它,这与你在标记中声明的典型viewstate启用控件所做的相反。