asp.net从数据集创建radiobutton

时间:2013-03-03 08:40:34

标签: c# asp.net dataset radio-button

我有一个包含许多项目的数据集,包括“blockID”和“blockName”。 我想填充radiobuttonlists,它们的值将是“blockName”属性,我需要它们按“blockID”属性进行分组。即,用户只能从每个“blockID”中选择一个“blockName”。 我正在使用c# 那可能吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

是的,有可能。我在下面做了一个例子,我知道它不是DataSet,但仍然是你如何做到这一点的一个很好的例子。仍然可以从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();