我以编程方式创建按钮,我放置在一个表内,我希望添加一个点击事件的按钮,但失败了

本文关键字:一个 按钮 添加 事件 失败 我希望 创建 方式 编程 | 更新日期: 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启用控件所做的相反。