gpt4 book ai didi

c# - 如何为动态生成的按钮添加事件处理程序

转载 作者:太空狗 更新时间:2023-10-30 01:05:49 24 4
gpt4 key购买 nike

这与这些问题非常相似,但它们似乎对我没有帮助(将在下面解释原因):

我正在创建一个 C# aspx 页面。该页面抓取一堆数据,然后从中构建一个表。表格中的一列包含一个按钮,该按钮在构建数据时动态创建(因为按钮的操作依赖于表格中的数据)。

Default.aspx

<body>
<form id="form1" runat="server">
<div>
<asp:Table ID="tblData" runat="server"></asp:Table>
</div>
</form>
</body>

Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
Build_Table();
}

protected void Build_Table()
{
//create table header row and cells
TableHeaderRow hr_header = new TableHeaderRow();
TableHeaderCell hc_cell = new TableHeaderCell();
hc_cell.Text = "This column contains a button";
hr_header.Cells.Add(hc_cell);
tblData.Rows.Add(hr_header);

//create the cell to contain our button
TableRow row = new TableRow();
TableCell cell_with_button = new TableCell();

//create the button
Button btn1 = new Button();
btn1.Click += new EventHandler(this.btn1_Click);

//add button to cell, cell to row, and row to table
cell_with_button.Controls.Add(btn1);
row.Cells.Add(cell_with_button);
tblData.Rows.Add(row);
}

protected void btn1_Click(Object sender, EventArgs e)
{
//do amazing stuff
}

这就是我绊倒的地方。我知道我的 EventHandler 没有被触发,因为它需要移到 Page_Load 方法。但是,如果我将 btn1 创建和 EventHandler 移至 Page_Load,我将无法再在 Build_Table 中访问它们!

我看到的所有代码示例要么在 ASPX 页面中静态添加了 btn1,要么在 Page_Load 中动态创建了它。实现我想要完成的目标的最佳方式是什么?

最佳答案

在绑定(bind)事件之前创建带有 ID 的按钮:

Button btn1 = new Button();
btn1.ID = "btnMyButton";
btn1.Click += new EventHandler(this.btn1_Click);

确保每个按钮都有唯一的 ID。另外,我个人会将代码移动到 Page_Init 而不是 Page_Load

关于c# - 如何为动态生成的按钮添加事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com