0

我正在创建基于 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。

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

4

3 回答 3

2

发生这种情况的唯一方法是,如果此方法执行了多次,或者这些按钮在加载过程中以某种方式持续存在,然后您再次调用它。但是,动态控件用于所有意图和目的,不会持久化,并且必须在每次回帖时重新创建才能使用。

因此,我的结论是,您不止一次调用它。

于 2013-09-19T14:54:56.753 回答
1

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

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

于 2013-09-19T15:10:25.790 回答
-2

将 i++ 替换为 ++i .. 这应该可以解决您的问题..

于 2013-09-19T14:56:55.127 回答