Вопрос может быть немного долго:Загрузка данных динамически в повторитель из кода позади файл
Я сделав Интернет оценку портал и там другой тип вопросов в базе данных, которая должна быть загружена в web-форме , Вопросами могут быть одиночный ответ (переключатель) или мульти-ответ (кнопка). Поэтому в зависимости от типа я создаю переключатель или флажок согласно требованию и загружаю его в повторитель во время выполнения. Код выглядит следующим образом:
SqlCommand cmd = new SqlCommand("select * from tbl_QuestionAnswer", con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
if ((string)dr["type"] == "SingleAnswer")
{
RadioButton rAnswer1 = new RadioButton();
rAnswer1.ID = "rbl_Answer1";
rAnswer1.GroupName = "QAnswer1";
rAnswer1.Text = dr["Answer1"].ToString();
Panel PAnswer1 = e.Item.FindControl("PAnswer1") as Panel;
PAnswer1.Controls.Add(rAnswer1);
RadioButton rAnswer2 = new RadioButton();
rAnswer2.ID = "rbl_Answer2";
rAnswer2.GroupName = "QAnswer1";
rAnswer2.Text = dr["Answer2"].ToString();
Panel PAnswer2 = e.Item.FindControl("PAnswer2") as Panel;
PAnswer2.Controls.Add(rAnswer2);
RadioButton rAnswer3 = new RadioButton();
rAnswer3.ID = "rbl_Answer3";
rAnswer3.GroupName = "QAnswer1";
rAnswer3.Text = dr["Answer3"].ToString();
Panel PAnswer3 = e.Item.FindControl("PAnswer3") as Panel;
PAnswer3.Controls.Add(rAnswer3);
RadioButton rAnswer4 = new RadioButton();
rAnswer4.ID = "rbl_Answer4";
rAnswer4.GroupName = "QAnswer1";
rAnswer4.Text = dr["Answer4"].ToString();
Panel PAnswer4 = e.Item.FindControl("PAnswer4") as Panel;
PAnswer4.Controls.Add(rAnswer4);
}
else
{
CheckBox cAnswer1 = new CheckBox();
cAnswer1.ID = "chk_Answer1";
cAnswer1.Text = dr["Answer1"].ToString();
Panel PAnswer1 = e.Item.FindControl("PAnswer1") as Panel;
PAnswer1.Controls.Add(cAnswer1);
CheckBox cAnswer2 = new CheckBox();
cAnswer2.ID = "chk_Answer2";
cAnswer2.Text = dr["Answer2"].ToString();
Panel PAnswer2 = e.Item.FindControl("PAnswer2") as Panel;
PAnswer2.Controls.Add(cAnswer2);
CheckBox cAnswer3 = new CheckBox();
cAnswer3.ID = "chk_Answer3";
cAnswer3.Text = dr["Answer3"].ToString();
Panel PAnswer3 = e.Item.FindControl("PAnswer3") as Panel;
PAnswer3.Controls.Add(cAnswer3);
CheckBox cAnswer4 = new CheckBox();
cAnswer4.ID = "chk_Answer4";
cAnswer4.Text = dr["Answer4"].ToString();
Panel PAnswer4 = e.Item.FindControl("PAnswer4") as Panel;
PAnswer4.Controls.Add(cAnswer4);
}
}
Но проблема в том, что все ответы загружаются во все вопросы. то есть из этого dr ["Answer1"] он берет все данные в столбце «Ответ1», а затем делает флажок или переключатель. Я не знаю, почему это происходит, поскольку он должен принимать только строку onr и данные только из этой строки.
Также это работает до 2 вопросов. После этого, если я добавлю третий вопрос и попытаюсь его загрузить, он дает сообщение об ошибке «Несколько элементов управления с одинаковым идентификатором« rbl_Answer1 ». FindControl требует, чтобы элементы управления имели уникальные идентификаторы». И это тоже правильно. Поэтому мне нужен подход, чтобы загрузить вопросы в веб-форму динамически в зависимости от единого ответа или нескольких -asnwer
Как вы дали имя_группы для радиокнопок. Вам не нужен идентификатор. Вы должны использовать RadiobuttonList и сохранить идентификатор radioobuttonlist также динамическим. Не жестко заданные значения, как в вашем сообщении. – Amit
У вас много дублирующегося кода. Вы думали о рефакторинге? Все эти «RadioButton rAnswer» = новый RadioButton(); ... «Кодовые блоки довольно похожи (такие же, как и с CheckBoxes). Рефакторинг этого по своему методу может улучшить читаемость. #justsaying –
Alexander
Динамическое добавление хорошее. Но тогда та же самая проблема сохраняется: dr [ColumnName] принимает все данные из этого столбца и добавляет в том же вопросе. И насколько я вижу, главная проблема для этого - повторитель. Из-за Repeater (панель находится внутри Repeater), dr [ColumnName] циклически во всех данных. Поэтому я думаю, что удаление всех элементов из страницы aspx и добавление всех элементов из кода за файлом, то есть
ответ
Это очень ясно, что вы можете создать контроль с тем же идентификатором , если у вас есть более одной строки в запросе ,
Попробуйте сделать динамическое поле/управления и установить динамический идентификатор для тех управления
или что-то в этом роде ...
источник
2015-06-25 11:11:44
да .. точно .. это хорошо. Я, конечно же, попытаюсь использовать его и вернуться к вам, если он работает или нет. благодаря – Jaimin
Смежные вопросы