У меня был некоторый опыт работы с элементами управления ASP и привязки данных. Проблема, с которой вы сталкиваетесь, заключается в , вероятно , в том факте, что после объявления элемента управления с помощью разметки вы не сможете получить к нему доступ из привязки данных. Также не следует путать идентификатор на стороне сервера с идентификатором на стороне клиента.
Идентификатор на стороне сервера, сопоставленный со свойством Id
элементов управления, используется для программного доступа к элементу управления из кода позади. Идентификатор на стороне клиента - это идентификатор, который будет помещен в атрибут id
тега и сопоставлен со свойством ClientId
.
Судя по вашему вопросу, вам нужно построить опрос с несколькими вариантами ответов, и, на мой взгляд, не важно, как генерируются идентификаторы, просто чтобы они правильно группировались для каждого вопроса.
Я отвечу на часть программного доступа к элементам управления в привязке данных, которая является частью вашего вопроса.
Вот пример из моего кода. Предположим, у вас есть очень простой GridView, подобный этому
<asp:GridView ID="example" runat="server" OnRowDataBound="DataBound">
<Columns>
<asp:TemplateField HeaderText="New">
<ItemTemplate>
<asp:Image ID="imgExample" runat="server" />
</ItemTemplate>
</Columns>
</asp:GridView>
Он берет набор данных во время привязки данных и устанавливает изображение в соответствии с некоторым свойством. Он работает так же, как DataList, не волнуйтесь.
Теперь, в коде позади, вы обрабатываете RowDataBoundEvent
. Вы не можете получить доступ к объекту imgExample
напрямую, потому что это дочерний элемент ItemTemplate. Когда строка связана, у вас есть прямой доступ к строке, а затем вы можете использовать метод FindControl
Control
class
Вот пример кода C # (легко конвертировать в VB)
protected void DataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow) //Required
{
GridViewRow row = e.Row;
[...] //get an email message
(row.Cells[0].FindControl("imgExample") as Image).ImageUrl = (email.AlreadyRead)
? "Mail_Small.png"
: "Mail_New_Small.png";
}
}
Приложение к вашему делу
Чтобы создать опрос с несколькими вариантами ответов, я советую создать DataList, в котором будут храниться вопросы (внешний элемент управления), а затем для каждой строки объявить RadioButtonList, содержащий ответы (внутренний элемент управления). Свяжите внешний список данных с набором вопросов и ответов. Обработайте событие RowDataBound или как бы оно ни вызывалось в мире DataList. Когда вы обработаете это событие, свяжите внутренний список радиобутонетов с ответами.
Это должно работать для вас