我有一个包含许多项目的数据集,包括“ blockID”和“ blockName”。
我想填充单选按钮列表,其值将为“ blockName”属性,我需要将其按“ blockID”属性分组。即用户只能从每个“ blockID”中选择一个“ blockName”。
我正在使用C#
那可能吗?
谢谢你的帮助!
最佳答案
对的,这是可能的。我在下面做了一个例子,我知道它不是一个数据集,但是仍然是一个很好的例子。我认为仍然可以从DataSet映射此结构,因为它确实使事情变得更容易。
给定DataSource项目的以下块类:
public class Block
{
public int ID { get; set; }
public List<string> BlockNames { get; set; }
public Block(int id, params string[] names)
{
ID = id;
BlockNames = new List<string>();
foreach (var item in names)
{
BlockNames.Add(item);
}
}
}
您会发现,使用此类,
BlockNames
已经与单个块的ID
分组了。在您的ASPX / ASCX标记中,定义
Repeater
并订阅OnItemDataBound
事件:<asp:Repeater ID="rptDummy" runat="server" OnItemDataBound="rptDummy_OnItemDataBound">
</asp:Repeater>
在
OnItemDataBound
事件上,动态添加RadioButtonLists
,每个BlockName是一个不同的RadioButton,每个RadioButtonList
是一个不同的BlockID:protected void rptDummy_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Block blk = (Block)e.Item.DataItem;
RadioButtonList list = new RadioButtonList();
list.ID = "rblBlocks";
list.Attributes.Add("BlockID", blk.ID.ToString());
foreach (string item in blk.BlockNames)
{
list.Items.Add(new ListItem(item, item));
}
e.Item.Controls.Add(list);
}
}
绑定转发器:
List<Block> blocks = new List<Block>();
blocks.Add(new Block(1, "BlockName1", "BlockName2", "BlockName3"));
blocks.Add(new Block(2, "BlockName4", "BlockName5"));
blocks.Add(new Block(3, "BlockName6"));
rptDummy.DataSource = blocks;
rptDummy.DataBind();
关于c# - asp.net从数据集中创建单选按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15183943/