2013-05-28 30 views
8

Wie lege ich das ausgewählte Element einer dropDownList in einem Repeater fest?SelectedValue von DropDownList in Repeater

Der Repeater ist an die repeaterData DataTable gebunden, und die dropDownList ist an dropDownList DataTable im nachfolgenden Code gebunden. Ich muss die SelectedValue-Eigenschaft der DropDownList auf den Wert eines Felds aus der RepeaterData-Tabelle festlegen. Diese

ist, was ich habe versucht:

<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> 

-Code Repeater zu füllen:

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

-Code Dropdownlist zu füllen:

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

Welches Ereignis oder Methode, die Sie zum Auffüllen verwenden 'degree_dropdown 'mit Daten? Könnten Sie den Code posten? – Win

Antwort

7

Sie sind fast da. Sie müssen nur DataItem zu DataRowView werfen, und weisen es DropDownList so -

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

Mit HTML5 custom attributes, können Sie Ihren Drop-Down-Wert in ein Datenattribut gesetzt, und dann als ausgewählter Wert eingestellt, nachdem die Drop-Down-databinded wird . Ich habe das Drop-down mit asp binded: Object

<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> 

Codebehind

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; 

} 

Die Bindung Ihrer Repeater-Steuerelement wird gleich bleiben