2009-10-08 136 views
0

我已經工作了幾天,試圖找出如何做到這一點創建。使用C#我有從各種數據庫表中拉出的數據列表。我想從這些數據中創建不同的DropDownLists,這些數據將在PostBacks中持續存在。我能夠通過這種方式來修補的一種方式是將數據解析到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

我建議使用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事件,將數據項或源綁定到每個中繼器項目的下拉列表。

如果你希望你的選擇堅持,包裹全部綁定邏輯的進入是唯一呼籲的Page_Load來檢查,如果該頁面是回傳if語句的內部方法。

if(!IsPostBack) { //Add method here } 

Viewstate應該照顧其餘的。

+0

感謝您的幫助。如果我要使用中繼器,您是否知道如何將下拉列表限制爲每行3個? – rpf3 2009-10-08 17:36:20

+0

爲了確保我理解正確,您需要一個重複控制,對於每一行,顯示1到3個下拉列表中的任何地方? 這是我想象你正在努力實現: < - 開始轉發器 - > <> <--DDL--><--DDL--><--DDL--> <> <> <--DDL--> <> <> <--DDL--><--DDL--> <> 。 。 。 < - End Repeater - > 這有點粗俗,但是這是你要做的輸出嗎? – 2009-10-09 14:23:10

+0

這就是希望。基本上我有一個表,將包含所有的DDLs。這些DDL是在其下顯示的數據集的過濾器選項。我不希望他們全都排在一起,因爲那樣他們會一起被碾壓,因爲我不知道會有多少人。我也不希望他們每行一個,因爲我認爲這將是不直觀的。 – rpf3 2009-10-09 15:13:31