2009-09-16 70 views
1

這是一個Populating DropDownList inside Repeater not working隨訪。無法設置的SelectedValue爲DropDownList的

我加入一箇中繼器內部的下拉列表。現在我需要集中選定的值,但談何容易?

這裏是我的代碼:

protected void criteriaScore_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 

     // This event is raised for the header, the footer, separators, and items. 
     // Execute the following logic for Items and Alternating Items. 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 

      DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRating"); 
      DataRowView drw = (DataRowView)e.Item.DataItem; 

      for (int i = 1; i < 6; i++) 
      { 
       ddl.Items.Add(new ListItem(i.ToString(), i.ToString())); 
      } 
      ddl.DataBind(); // <- Not sure if this is needed here. 
      ddl.SelectedValue = drw.Row["lvl"].ToString(); 
     } 
    } 

drw.Row [「拉特」]的ToString()是一個值。 1-5。

我試過設置的SelectedValue和的SelectedIndex。

我也試過

ddl.SelectedValue = Convert.ToString(ddl.Items.FindByText(drw.Row["lvl"].ToString()).Value) ; 

我跑出來的想法。

回答

7

哇,你正在這樣複雜得多,它需要的。不要在ItemDataBound上做這件事,在控件的DataBinding屬性上做。

在您的下拉列表定義數據綁定事件:

<asp:DropDownList runat="server" ID="ddlYourDDL" OnDataBinding="ddlYourDDL_DataBinding"> 

然後實現OnDataBinding事件:

protected void ddlYourDDL_DataBinding(object sender, System.EventArgs e) 
{ 
    DropDownList ddl = (DropDownList)(sender); 
    for (int i = 1; i < 6; i++) 
    { 
     ddl.Items.Add(new ListItem(i.ToString(), i.ToString())); 
    } 

    // Now that the items are all there, set the selected property 
    ddl.SelectedValue = Eval("lvl").ToString(); 
} 

你應該嘗試做你的綁定在控制層面,而不是尋找的東西,有你的網格必須知道它包含的內容。每個控件可以自己照顧自己;)

我不同意你的以前鏈接的問題給出這個問題的答案,使用ItemBound事件。當事件需要影響多於一個控制時,應該在'項目'級別使用此事件。

編輯:所以如果在未來發現我也加入了這個信息到您的其他問題,別人不使用ItemBound事件作此用途。

+0

是的,這工作很好:) – Steven 2009-09-17 07:38:59

0

我在過去遇到過麻煩。我相信我接觸到的方式是在下拉列表中找到該項目,並將所選屬性設置爲true。

編輯:這裏有兩個例子 - 我更喜歡FindByValue語法自己...

YourDDL.ClearSelection(); 
foreach (ListItem item in YourDDL.Items) 
{ 
    if (item.Value == YourString) 
    { 
     item.Selected = true; 
     break; 
    } 
} 


YourDDL.Items.FindByValue("1").Selected = true; 
相關問題