我已经工作了几天试图找出如何做到这一点。在C#中工作我有一个从各种数据库表中提取的数据列表。我想从这些将在PostBacks中保留的数据创建不同的DropDownLists。我能够修改这种方法的一种方法是将数据解析为List>并在彼此内嵌两个中继器。
<asp:Repeater ID="rpt3" runat="server">
<ItemTemplate>
<select>
<asp:Repeater DataSource="<%#Container.DataItem%>" runat="server">
<ItemTemplate>
<option><%#Container.DataItem%></option>
</ItemTemplate>
</asp:Repeater>
</select>
</ItemTemplate>
</asp:Repeater>
这个问题是SelectedValues不会保存在ViewState中。
是否有一些简单的方法可以解决这个问题?
非常感谢
答案 0 :(得分:1)
我建议使用DropDownList控件来显示您的个人结果。
在前端,您需要简单地声明下拉列表:
<asp:DropDownList id="ddl1" runat="server">
</asp:DropDownList>
您的后端代码应包含将数据源绑定到下拉列表的方法。例如:
this.ddl1.DataSource = ds; //Assuming that you are using a DataSet called ds.
this.ddl1.DataTextField = "TextColumnName"; //The column name or property name you want to use as the text data
this.ddl1.DataValueField = "ValueColumnName"; //The column name or property name you want to use as the value data
this.ddl1.DataBind();
仅在需要绑定时(例如在初始页面加载时或需要刷新数据源时)在后端调用此方法。
如果您想要转发下拉列表,只需执行以下操作:
<asp:repeater id="rpt1" runat="server">
<ItemTemplate>
<asp:DropDownList id="ddl1" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:repeater>
将包含每个DDL所需值集合的数据源绑定到转发器和转发器的OnItemDatabound事件中,将数据项或源绑定到每个转发器项的下拉列表。
如果您希望选择保持不变,请将所有绑定逻辑包装到一个方法中,该方法仅在if语句中调用Page_Load,该语句检查页面是否在PostBack中。
if(!IsPostBack) { //Add method here }
Viewstate应该处理剩下的事情。