嘗試這種情況:
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
變得更好,它往往是不清楚Item1
和Item2
手段。
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;
}
}
後的aspx代碼,代碼中獲取數據,並且你在哪裏調用此方法? – 2013-03-03 19:30:55
您將單選按鈕列表綁定到中繼器而不是數據。 如果你把單選按鈕放在中繼器itemTemplate中,只需綁定數據,你應該可以得到它 – 2013-03-03 19:31:02
與論壇站點不同,我們不使用「謝謝」或「任何幫助讚賞」,或簽署[so ]。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - 刪除 - 從帖子)。 – 2013-03-03 21:06:50