我正在创建基于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。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:2)
这种情况发生的唯一方法是,如果在加载过程中这些按钮以某种方式保留,然后再次调用,则此方法执行多次或。但是,动态控件适用于所有意图和目的不,并且必须在每个帖子上重新创建才有用。
因此,我的结论是,你不止一次地称呼它。
答案 1 :(得分:1)
正如其他用户所说,如果多次调用该函数,将抛出此错误。每次调用时,您的函数都会重新启动。这将复制ID。
假设这实际上是所需的行为,您的函数可以被多次调用,并且每次都会创建新的按钮。使int i = 1;
成为一个类级变量可以解决这个问题。
答案 2 :(得分:-2)
用++ i替换i ++ ..这应该可以解决你的问题..