2013-03-03 111 views
5

我在我的aspx中繼器:在網頁的C#側填充的ASP.NET直放站

<asp:Repeater ID="rptDummy" runat="server" OnItemDataBound="rptDummy_OnItemDataBound" 
    Visible="true"> 
</asp:Repeater> 

我寫了這個功能:

protected void createRadioButtons(DataSet ds){ 
    List<System.Web.UI.WebControls.RadioButton> buttons = new List<System.Web.UI.WebControls.RadioButton>(); 
    foreach (DataTable dt in ds.Tables){ 
      foreach (DataRow r in dt.Rows){ 
       System.Web.UI.WebControls.RadioButton rb = new System.Web.UI.WebControls.RadioButton(); 
       rb.Text = r[1] + " " + r[2] + " " + r[3] + " " + r[4]; 
       rb.GroupName = (string)r[5]; 
       buttons.Add(rb); 
      } 
     } 
     rptDummy.DataSource = buttons; 
     rptDummy.DataBind(); 
} 

但嘗試它時,它顯示沒有。 我在做什麼錯?

+0

後的aspx代碼,代碼中獲取數據,並且你在哪裏調用此方法? – 2013-03-03 19:30:55

+1

您將單選按鈕列表綁定到中繼器而不是數據。 如果你把單選按鈕放在中繼器itemTemplate中,只需綁定數據,你應該可以得到它 – 2013-03-03 19:31:02

+1

與論壇站點不同,我們不使用「謝謝」或「任何幫助讚賞」,或簽署[so ]。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - 刪除 - 從帖子)。 – 2013-03-03 21:06:50

回答

12

嘗試這種情況:

1 - 定義Repeater

<asp:Repeater ID="rptDummy" runat="server" OnItemDataBound="rptDummy_OnItemDataBound" > 
    <ItemTemplate> 
     <asp:RadioButtonList ID="rbl" runat="server" DataTextField="Item2" DataValueField="Item2" /> 
    </ItemTemplate> 
</asp:Repeater> 

2 - 生成所述數據結構並結合中繼器:

List<Tuple<string,string>> values = new List<Tuple<string,string>>(); 

foreach (DataTable dt in ds.Tables){ 
    foreach (DataRow r in dt.Rows){ 
     string text = r[1] + " " + r[2] + " " + r[3] + " " + r[4]; 
     string groupName = (string)r[5]; 
     values.Add(new Tuple<string,string>(groupName, text)); 
    } 
} 

//Group the values per RadioButton GroupName 
rptDummy.DataSource = values.GroupBy(x => x.Item1); 
rptDummy.DataBind(); 

3 - 定義OnItemDataBound事件:

protected void rptDummy_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     IGrouping<string, Tuple<string, string>> group = (IGrouping<string, Tuple<string, string>>)e.Item.DataItem; 
     RadioButtonList list = (RadioButtonList)e.Item.FindControl("rbl"); 

     list.DataSource = group; 
     list.DataBind(); 
    } 
} 

你看,每個IGrouping<string, Tuple<string, string>>是指一組特定組名的單選按鈕的,他們也是從轉發的項目。對於每個項目,我們創建一個新的RadioButtonList,它代表整個RadioButton組。

您可以通過使用不同的數據結構比Tuple變得更好,它往往是不清楚Item1Item2手段。

UPDATE:

如果你想看到所選值:中繼器的

protected void button_OnClick(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem item in rptDummy.Items) 
    { 
     RadioButtonList list = (RadioButtonList)item.FindControl("rbl"); 
     string selectedValue = list.SelectedValue; 
    } 
} 
+0

+1對我來說是新東西 – 2013-03-03 21:10:38

+0

太棒了!它的工作原理! 現在,我該如何「接收」所有選定的? – Javi 2013-03-03 21:54:07

+0

是的,你會有通過Repeater項來遍歷每個RadioButtonList。 – 2013-03-03 21:57:59

1

您應該將RadioButton放在重複器中並將其綁定到createRadioButtons事件中。

+0

請問您能更詳細嗎? – Javi 2013-03-03 20:10:30