【问题标题】:c# add button event programmaticallyc# 以编程方式添加按钮事件
【发布时间】:2014-01-20 22:19:34
【问题描述】:

尝试以编程方式将按钮添加到网络表单。 有些工作 - 其他人没有。 在下面的代码中,我在 Page_Load 中添加了 btnY 和 btnX。 这些都有效 - 它们显示在页面上并触发事件 并且事件处理程序中的代码有效.... 在页面加载中,我还运行了获取 DataTable 的 bindData 并使用数据创建控件。 在示例中,我只创建 Button。 这些按钮将正确显示在页面上,但在单击时 他们只做回发.. 事件处理程序中的代码不起作用 - 它被调用了吗? 所有按钮的事件处理程序都是相同的。 任何想法为什么或如何使它工作?

protected void Page_Load(object sender, EventArgs e)
{
    PlaceHolder1.Controls.Add(btn("btnY", "Y"));
    Pages P = new Pages();
    bindData(P.DT);
    PlaceHolder1.Controls.Add(btn("btnX", "X"));
}
Button btn(string id, string text)
{
    Button btn1 = new Button();
    btn1.ID = id;
    btn1.Text = text;
    btn1.Click += new System.EventHandler(this.btn_click);
    return btn1;
}
protected void bindData(DataTable dt)
{
    foreach (DataRow row in dt.Rows)
    {
        render(Convert.ToInt32(row["PageKey"]));
    }
}
protected void render(int pageKey)
{
    PlaceHolder1.Controls.Add(btn("btn_" + pageKey.ToString(), "Edit"));
}

protected void btn_click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    string id = btn.ID;
    Pages P = new Pages();
    bindData(P.DT);
    lt.Text = "ID=" + id;

}

【问题讨论】:

  • Page_Load 中为您的btn 添加一个Event Handler
  • 刚刚在 page_load 中尝试过这个... 仍然没有好的 foreach (Control c in this.Controls) { if (c is Button) { Button b = (Button)c; b.Click += new System.EventHandler(this.btn_click); } }

标签: c# events web-controls


【解决方案1】:

没关系..想通了..上面的例子应该可以工作,我的实际代码有一个导致问题的 if (!Page.PostBack)

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多