Быстрый просмотр вашего кода:
for (int i = 3; i < numfields; i++) {
if (dr[i].ToString() != "" && dr[i] != null){
r.Items.Add(new ListItem(dr[i].ToString(), dr[i].ToString()));
//r.SelectedIndexChanged += new EventHandler(rowSelectedIndex);
}
}
Самая очевидная вещь, которая выпадает, - это ваше заявление if. Вы должны сначала проверить на ноль:
if (dr[i] != null && dr[i].ToString() != ""){
Как будто dr [i] имеет значение null, вы получите исключение (поскольку вы будете пытаться вызвать метод ToString () для нулевого объекта.
Если содержимое dr всегда будет строкой, вы можете написать:
if(!String.IsNullOrEmpty(dr[i]){
Я также отмечаю, что вы начинаете индексирование с 3 - это потому, что вы хотите пропустить первые 3 поля?
Где бы вы ни создавали свою переменную, 'r' , вы можете установить свойства name и ID. Вы можете использовать свойство ID для поиска элемента управления в PostBack. Итак, если вы создали свой радиолист так:
RadioButtonList r = new RadioButtonList();
r.Id = "MyRadioButtonList";
r.SelectedIndexChanged += MyRadioButton_SelectedIndexChanged;
Который будет указывать на следующий обработчик события:
private void MyRadioButton_SelectedIndexChanged(Object sender, EventArgs e) {
... Do Stuff ...
}
Есть несколько способов найти свой контроль, когда вы отправляете обратно; вы можете найти в коллекции Request.Forms элемент управления, совпадающий с именем отправленного вами элемента управления, или, что более уместно, вы можете использовать метод FindControl с идентификатором, который вы дали элементу управления. См. C #, FindControl для публикации с методом (Джефф Этвуд!), Который будет искать всю иерархию элементов управления для вашего элемента управления.
При добавлении динамического элемента управления тоже важно. Если вы добавите его слишком поздно в жизненном цикле страницы, он не будет доступен в PostBack. См. http://support.microsoft.com/kb/317515 для более подробной информации о , когда добавить элемент управления. Существует множество ресурсов для динамических элементов управления ASP.Net.