2

「blockID」と「blockName」を含む多くのアイテムを含むデータセットがあります。値が「blockName」プロパティになるラジオボタンリストを設定したいのですが、「blockID」プロパティでグループ化する必要があります。つまり、ユーザーは各「blockID」から 1 つの「blockName」のみを選択できます。私はc#を使用していますが、それは可能ですか? 助けてくれてありがとう!

4

1 に答える 1

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はすでに1つのブロックでグループ化されていIDます。

ASPX / ASCXマークアップで、を定義し、イベントRepeaterをサブスクライブします。OnItemDataBound

<asp:Repeater ID="rptDummy" runat="server" OnItemDataBound="rptDummy_OnItemDataBound">
</asp:Repeater>

OnItemDataBoundイベントで、各BlockNameが異なるRadioButtonであり、それぞれが異なるBlockIDであるを動的に追加しRadioButtonListsますRadioButtonList

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();
于 2013-03-03T11:41:11.010 に答える