动态创建按钮创建,循环不创建唯一ID

时间:2013-09-19 14:49:49

标签: c# asp.net

我正在创建基于SQL查询结果动态创建的按钮:

private void createPagingButtons(DateTime firstDayofWeek, DateTime lastDayofWeek)
{
    int i = 1;
    SqlDataReader returnedQuery = getDefaultUser(firstDayofWeek, lastDayofWeek);
    while (returnedQuery.Read())
    {
        string buttonName = returnedQuery["Person"].ToString();
        System.Diagnostics.Debug.WriteLine(buttonName);
        Button btn = new Button();
        btn.ID = i.ToString();
        btn.Click += new EventHandler(btn_Click);
        btn.Text = buttonName;
        pagingPanel.Controls.Add(btn);
        i++;
    }
}

我尝试分配唯一按钮ID的方法是为每个while循环迭代时分配一个递增的数字:

btn.ID = i.ToString();

但它没有用,我收到一个错误: 找到具有相同ID“1”的多个控件。 FindControl要求控件具有唯一ID。

为什么会发生这种情况,我该如何解决?

3 个答案:

答案 0 :(得分:2)

这种情况发生的唯一方法是,如果在加载过程中这些按钮以某种方式保留,然后再次调用,则此方法执行多次。但是,动态控件适用于所有意图和目的,并且必须在每个帖子上重新创建才有用。

因此,我的结论是,你不止一次地称呼它。

答案 1 :(得分:1)

正如其他用户所说,如果多次调用该函数,将抛出此错误。每次调用时,您的函数都会重新启动。这将复制ID。

假设这实际上是所需的行为,您的函数可以被多次调用,并且每次都会创建新的按钮。使int i = 1;成为一个类级变量可以解决这个问题。

答案 2 :(得分:-2)

用++ i替换i ++ ..这应该可以解决你的问题..