从数据库数据创建的动态控件

时间:2009-10-08 15:33:03

标签: asp.net database postback viewstate

我已经工作了几天试图找出如何做到这一点。在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中。

是否有一些简单的方法可以解决这个问题?

非常感谢

1 个答案:

答案 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应该处理剩下的事情。