我的问题 - =>当我点击按钮时,页面只是刷新而按钮消失了。我想要的是当我点击按钮时,我可以识别按钮ID并显示消息。
我的GridView代码 -
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);
}
答案 0 :(得分:1)
您是否考虑过使用网格控件:
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.
}
}
答案 1 :(得分:0)
很难说没有看到所有代码,但动态添加控件几乎总是PITA。您必须确保的一件事是您正在重新创建回发控件。整个控制树必须相同才能使事件和视图状态正常工作。所以你需要尽可能早地调用initData(),你也必须调用它来进行回发,这与你在标记中声明的典型的启用ViewState的控件的做法相反。