2013-09-19 3 views
0

Я работаю над созданием кнопок, которые создаются динамически на основе результаты SQL-запрос:Динамически создаваемое создание кнопки Loop не создавая уникальные идентификаторы

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++; 
    } 
} 

Так я пытаюсь присвоить уникальный идентификатор кнопки является по назначая их число, которое увеличивается на единицу каждый раз, когда перебирает время цикла:

btn.ID = i.ToString(); 

Но это не работает, и я получаю сообщение об ошибке: несколько элементов управления с тем же идентификатором «1» были найдены. FindControl требует, чтобы элементы управления имели уникальные идентификаторы.

Почему это происходит и как я могу это исправить?

+1

Почему бы вам не использовать значащие имена типа 'BtnPerson_1'? –

+0

Что произойдет, если вы добавите буквы 'btn.ID =" btn_ "+ i.ToString();'? –

+0

btn.ID = "Btn_" + i.ToString(); вызывает ту же ошибку. Было найдено несколько элементов управления с тем же идентификатором 'Btn_1'. FindControl требует, чтобы элементы управления имели уникальные идентификаторы. –

ответ

2

Единственный способ, которым это может произойти, - это если этот метод был выполнен более одного раза или, если эти кнопки каким-то образом сохраняются во время загрузки, а затем вы вызываете его снова. Однако динамические элементы управления для всех целей и задач не сохраняются и должны быть воссозданы на каждом столбце, чтобы быть полезными.

Таким образом, мой вывод, вы называете его более одного раза.

-2

Заменить я ++ с ++ я .. Это должно решить проблему ..

+0

Downvoters..whats причина .. это не работает –

+2

http://stackoverflow.com/questions/3346450/what-is-the-difference-between-i-and-i –

+0

@Avinash Этот ответ не решает проблема. – alstonp

1

Как сказали, что другие пользователи будет выброшен эта ошибка, если функция вызывается более чем один раз. Ваша функция будет перезапускаться каждый раз при каждом вызове. Что будет дублировать идентификаторы.

Предполагая это на самом деле желаемое поведение, что ваша функция может быть вызвана несколько раз и будет создавать новые кнопки каждый раз. Создание вашей int i = 1; переменной уровня класса позволит решить эту проблему.

Смежные вопросы