我以编程方式创建放置在表格中的按钮,我希望向按钮添加单击事件但失败了

时间:2014-08-06 20:27:48

标签: c# asp.net events button

我的问题 -   =>当我点击按钮时,页面只是刷新而按钮消失了。我想要的是当我点击按钮时,我可以识别按钮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);
    }

2 个答案:

答案 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的控件的做法相反。