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

本文关键字:创建 唯一 ID 循环 按钮 动态 | 更新日期: 2023-09-27 18:32:11

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

这是怎么回事,我该如何解决?

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

发生这种情况

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

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

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

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

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