Обычно я справляюсь с подобной ситуацией, используя Repeater
Control.
В aspx у вас будет что-то вроде этого:
<asp:Repeater ID="myRepeater" runat="server" OnItemDataBound="R1_ItemDataBound">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Literal id="litQuestion" runat="server">
</td>
<td>
<asp:PlaceHolder id="phRow" runat=server"/>
</td>
<td>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
В коде позади вы должны иметь:
При загрузке страницы, только если это не PostBack
myRepeater.DataSource = myQuestions; // myQuestions would be a list of questions, for instance
myRepeater.DataBind();
А позже
void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
// This event is raised for the header, the footer, separators, and items.
// Execute the following logic for Items and Alternating Items.
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
string question = (string)e.Item.DataItem;
Literal litQuestion = (Literal) e.Item.FindControl("litQuestion");
litQuestion.Text = question;
PlaceHolder phRow = (PlaceHolder) e.Item.FindControl("phRow");
if (question.StartsWith("something")){
phRow.Controls.Add(new RadioButton("blabla"));
}
if (((Evaluation)e.Item.DataItem).Rating == "Good") {
((Label)e.Item.FindControl("RatingLabel")).Text= "<b>***Good***</b>";
}
}
}
Обратите внимание на OnItemDataBound
в aspx: это означает, что R1_ItemDataBound
будет вызываться для каждого элемента в вашем списке вопросов.