Accessデータソースからネストされたリピーターを使用して階層化リストを生成しようとしています。各アイテムには一意のIDがありますが、エリアごとに分類されています。
リストを次のようにしたいと思います。
- エリア1
- item1
- item2
- エリア2
- item3
- item4
- など..。
試してみてください。Areaグループ要素が繰り返され続け、次のようになります。
- エリア1
- item1
- エリア1
- item2
- エリア2
- item3
- エリア2
- item4
- など..。
私のマークアップは以下に掲載されています。
<asp:Repeater ID="CategoryRepeater" runat="server" OnItemDataBound="CategoryRepeater_bound" EnableViewState="false">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
<ItemTemplate>
<li>
<%#((DataRowView)Container.DataItem)["Area"]%>
</li>
<asp:Repeater ID="childRepeater" runat="server">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
<ItemTemplate>
<li>
<%#((DataRowView)Container.DataItem)["ItemID"]%>
</li>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
{
string cn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|Source.mdb";
using (OleDbConnection conn = new OleDbConnection(cn))
{
OleDbCommand cmd = new OleDbCommand("Select ItemID, Area FROM [Location]", conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "Table1");
cmd.CommandText = "SELECT Area, ItemID, Drawing FROM [Location]";
da.SelectCommand = cmd;
da.Fill(ds, "Table2");
ds.Relations.Add(new DataRelation("drTable", ds.Tables["Table1"].Columns["ItemID"], ds.Tables["Table2"].Columns["ItemID"]));
CategoryRepeater.DataSource = ds.Tables["Table1"];
CategoryRepeater.DataBind();
}
}
protected void CategoryRepeater_bound(object source, RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
if (item.ItemType == ListItemType.AlternatingItem || item.ItemType == ListItemType.Item)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
Repeater rep = (Repeater)item.FindControl("childRepeater");
rep.DataSource = drv.CreateChildView("drTable");
rep.DataBind();
}
}