[英]Populating an ASP.NET Repeater
我的aspx中有一个转发器:
<asp:Repeater ID="rptDummy" runat="server" OnItemDataBound="rptDummy_OnItemDataBound"
Visible="true">
</asp:Repeater>
在网络的c#侧我写了这个函数:
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();
}
但是在尝试时,它什么都没有显示出来。 我究竟做错了什么?
试试这个:
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>>
指的是某个GroupName的一组RadioButtons,它们也是来自转发器的项目。 对于每个项目,我们创建一个新的RadioButtonList,它代表整个RadioButtons组。
您可以通过使用与Tuple
不同的DataStructure来使其更好,通常不清楚Item1
和Item2
含义。
更新:
如果要查看所选值:
protected void button_OnClick(object sender, EventArgs e)
{
foreach (RepeaterItem item in rptDummy.Items)
{
RadioButtonList list = (RadioButtonList)item.FindControl("rbl");
string selectedValue = list.SelectedValue;
}
}
您应该将RadioButton
放在转发器中并将其绑定在createRadioButtons
事件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.