2013-03-03 65 views
2

我有一个数据集包含许多项目,包括“blockID”和“blockName”。 我想填充它们的值为“blockName”属性的单选按钮列表,我需要按“blockID”属性对它们进行分组。即用户可以从每个“块ID”中仅选择一个“块名”。我使用c# 这可能吗? 感谢您的帮助!asp.net从数据集创建单选按钮

回答

2

是的,这是可能的。我在下面做了一个例子,我知道它不是一个DataSet,但仍然是一个很好的例子,你可以做到这一点。从DataSet中映射这个结构仍然是可能的,因为在我看来这会让事情变得更容易。

鉴于数据源项目的下列块类:

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,每个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(); 
+0

非常感谢您的回复。 有一件事我觉得我没有解释得很好,我谈到的“块”是在数据库中,我们使用一个过程从数据库中获取它。 程序返回给我们一个数据集。 该数据集包含许多“blockID”和“blockName”,我们必须根据“blockID” 非常感谢您将它们分成单选按钮组! – Javi 2013-03-03 13:50:31

+0

是的,我的回答涵盖了许多BlockID和与其相关的许多Blockname的情况。我知道你没有使用过的数据结构,但是你可以将''Dataset''变成''''''''''''''对象的List。正如我所说,这是一个很好的选择,你想要什么。 – 2013-03-03 13:58:03

+0

好吧,我现在看到它!非常感谢你! – Javi 2013-03-03 13:58:50