<ItemTemplate>
<asp:Label runat="server"><%#DataBinder.Eval(Container.DataItem, "Question")%></asp:Label>
<asp:DropDownList runat="server" id="<%#DataBinder.Eval(Container.DataItem, "QuestionID")%>">>
<asp:ListItem value="1" text="Yes" />
<asp:ListItem value="0" text="No" />
</asp:DropDownList>
<ItemTemplate>
这大致是我想要做的。显然,实施是错误的,但我找不到任何有关我如何在实践中解决这个问题的信息。任何帮助表示赞赏。
编辑:我正在尝试做的是为此Repeater中的每个项添加一个DropDownList,并在提交表单后,使用每个是/否答案的ID输入到数据库中。我正在使用的SqlDataReader有两个字段:问题内容和questionID。
答案 0 :(得分:4)
我认为你最好在Repeater中使用内置的ID支持。如果目标是为其分配一个ID,以便在数据绑定后轻松找到正确的控件,您可以尝试这样的事情:
<asp:Repeater ID="Repeater1" runat="server>
<ItemTemplate>
<asp:Label ID="QuestionID" Visible="False" Runat="server"><%#DataBinder.Eval(Container.DataItem, "FieldContent")%></asp:Label>
<asp:DropDownList ID="MyDropDownList" Runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
然后,在您的代码中,您可以遍历Repeater中的项目,直到找到您要查找的标签:
foreach (RepeaterItem curItem in Repeater1.Items)
{
// Due to the way a Repeater works, these two controls are linked together. The questionID
// label that is found is in the same RepeaterItem as the DropDownList (and any other controls
// you might find using curRow.FindControl)
var questionID = curRow.FindControl("QuestionID") as Label;
var myDropDownList = curRow.FindControl("MyDropDownList") as DropDownList;
}
Repeater基本上由RepeaterItems集合组成。 RepeaterItems使用ItemTemplate标记指定。每个RepeaterItem都有自己的一组控件,这些控件本身就是一个Repeater,它们彼此相关联。
假设您从数据库中提取Repeater数据。每个Repeater项表示查询结果中单个行的数据。因此,如果您将QuestionID分配给标签并将QuestionName分配给DropDownList,则标签中的ID将与下拉列表中的名称匹配。
答案 1 :(得分:0)
你可以从标记文件中删除控件,并挂钩转发器的onItemDataBound事件。在那种情况下,您应该能够“手动”创建下拉控件,分配您想要的任何ID。