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