在C#中动态创建链接按钮

时间:2016-03-22 22:12:54

标签: c# asp.net dynamic

我的问题是我动态创建一个表,其中每个单元格都包含一个链接按钮,单击时应该从表中删除该单元格。 (这比我复杂一点,但我不会详细说明,只是说解决方法不会这样做)我已经阅读了一些关于此的帖子,通常会提到控件也是(重新)制作的在页面加载或之前。我试图运行从页面加载和页面init和pre init运行setCellContent的方法,但是_lnkBntRemoveSlotFromTable_Click方法 从未调用链接按钮被单击。而且我开始怀疑除了创建/重新创建控件之外还有其他错误。

对于表格所包含的每个单元格,这就是所做的:

private TableCell setCellContent(string day, DateTime timeOfDay){
    TableCell newCell = new TableCell();
    LinkButton lb = new LinkButton();
    lb.ID = (++global_counter_id).ToString();
    lb.Text = timeOfDay.ToShortTimeString();
    lb.CommandArgument = timeOfDay.ToString();
    lb.Command += new CommandEventHandler(_lnkBntRemoveSlotFromTable_Click);
    newCell.Controls.Add(lb);
    return newCell;
}

我想要调用的方法:

public void _lnkBntRemoveSlotFromTable_Click(object sender, CommandEventArgs e)
{
    //1. Make changes to the table
}

但是从不调用该方法。

1 个答案:

答案 0 :(得分:1)

终于搞定了。一些变化使它工作。它与表创建时以及如何创建id有关。对于其他人的建议,这是一个什么时候工作的例子..并确保动态控件的ID在页面加载时保持不变。

public partial class _default : System.Web.UI.Page
    {
        static int i = 0;

        protected override void OnInit(EventArgs e)
        {
        base.OnInit(e);
            LinkButton lb = new LinkButton();
            lb.ID = "id";
            lb.Text = "Click me";
            lb.CommandArgument = "argument";
            lb.Command += new CommandEventHandler(method_to_call);
            this.Panel.Controls.Add(lb);
        }

        private void method_to_call(object sender, CommandEventArgs e)
        {
            i++;
            this.Label.Text = i.ToString();
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }

    }