2013-05-28 16 views
8

Jak ustawić wybraną pozycję z dropDownList wewnątrz repeatera?Wybrana wartość DropDownList w Repeater

Powtarzacz jest powiązany z repeaterData DataTable, a dropDownList jest przypisany do dropDownList DataTable w kodzie z tyłu. Muszę ustawić właściwość SelectedValue z DropDownList na wartość pola z tabeli repeaterData.

To co próbowałem:

<asp:Repeater runat="server" ID="myRepeater> 
<ItemTemplate> 
    <asp:DropDownList runat="server" CssClass="fullSelect" ID="degree_dropdown" 
      AppendDataBoundItems="true" 
      selectedValue='<%#DataBinder.Eval(Container.DataItem,"degreeCode")%>'> 
        <asp:ListItem Text="Select Degree" /> 
    </asp:DropDownList> 
</ItemTemplate> 
</asp:Repeater> 

kod do wypełnienia powielacz:

myRepeater.DataSource = myRepeaterData; //myRepeaterData is a datatable 
myRepeater.DataBind(); 

kod zapełnić dropdownlist:

protected void educationPopup_repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 
      DropDownList degree_dropdown = e.Item.FindControl("degree_dropdown") as DropDownList; 
      if (degree_dropdown != null) 
      { 
       degree_dropdown.DataSource = degrees; //a datatable 
       degree_dropdown.DataTextField = "degree"; 
       degree_dropdown.DataValueField = "code"; 
       degree_dropdown.DataBind(); 
      } 
} 
+0

Jakie wydarzenie lub metody używacie do zapełniania 'degree_dropdown 'z danymi? Czy możesz napisać kod? – Win

Odpowiedz

7

Jesteś prawie tam. Wystarczy rzucić DataItem do DataRowView i przypisać go do DropDownList tak -

protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || 
     e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var degree_dropdown = e.Item.FindControl("degree_dropdown") as DropDownList; 
     string degreeCode = (string) ((DataRowView) e.Item.DataItem)["degreeCode"]; 

     if (degree_dropdown != null) 
     { 
      degree_dropdown.DataSource = degrees; //a datatable 
      degree_dropdown.DataTextField = "degree"; 
      degree_dropdown.DataValueField = "code"; 
      degree_dropdown.DataBind(); 

      if (degree_dropdown.Items.FindByValue(degreeCode) != null) 
       degree_dropdown.SelectedValue = degreeCode; 
     } 
    } 
} 
0

Z HTML5 custom attributes, można ustawić wartość rozwijaną w atrybucie danych, a następnie ustawienie go jako wybranej wartości po rozwijana jest databinded . Mam zbindowanych listę rozwijaną przy użyciu asp: ObjectDataSource

<asp:Repeater runat="server" ID="myRepeater> 
<ItemTemplate> 

<asp:DropDownList runat="server" CssClass="fullSelect" ID="degree_dropdown" 
      AppendDataBoundItems="true" 
      SetValue='<%#DataBinder.Eval(Container.DataItem,"degreeCode")%>' 
datasourceid="dsCategory" datatextfield="degree" datavaluefield="code" onprerender="DropDownDataBinding"> 
        <asp:ListItem Text="Select Degree" /> 
    </asp:DropDownList> 
<asp:ObjectDataSource ID="dsCategory" runat="server" SelectMethod="LoadDegree" TypeName="WebApplication.WebForm1" /> 
</ItemTemplate> 
</asp:Repeater> 

kodzie

protected void DropDownDataBinding(object sender, EventArgs e) //Method to set the selected value on Category dropdown inside repeater 
{ 
    DropDownList sel = (DropDownList)sender; 
    sel.Value = sel.Attributes["SetValue"]; 
    ListItem li = new ListItem("<<Select>>", ""); 
    sel.Items.Insert(0,li); 
} 

protected DataTable LoadDegree() 
{ 
     DataTable dt = new DataTable(); 
     dt = degrees; //a datatable 
     return dt; 

} 

Wiązanie kontrolą repeater pozostaną takie same

Powiązane problemy