私はとても近いですが、これまでのところ。2 つのテーブルがあります。1 つはパブリケーションの詳細用で、もう 1 つはカテゴリ隣接リスト用です。
ネストされたリピーターを使用して完全なデータセットを表示しようとしています (より良い方法がない限り)。次のように DataSet を構築しています。
string strSql = "SELECT category_id, parent_id, cat_name_en " +
"FROM categories;" +
"SELECT pub_id, title_en, category_id " +
"FROM publications;";
SqlConnection conn = new SqlConnection(connString.ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
DataSet _ds = new DataSet();
da.Fill(_ds);
_ds.DataSetName = "categories";
_ds.Tables[0].TableName = "category";
_ds.Tables[1].TableName = "publications";
_ds.Relations.Add("ParentChild",
_ds.Tables["category"].Columns["category_id"],
_ds.Tables["category"].Columns["parent_id"], false);
_ds.Relations[0].Nested = true;
_ds.Relations.Add("CategoryMembers",
_ds.Tables["category"].Columns["category_id"],
_ds.Tables["publications"].Columns["category_id"], false);
_ds.Relations[1].Nested = true;
categoryRepeater.DataSource = _ds.Tables["category"];
categoryRepeater.DataBind();
次のようにデータを表示しています。
<asp:Repeater runat="server" ID="categoryRepeater" EnableViewState="false">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "category_id") %>
<%# DataBinder.Eval(Container.DataItem, "cat_name_en") %><br />
<asp:Repeater runat="server" EnableViewState="false"
DataSource='<%# GetChildRelation(Container.DataItem, "CategoryMembers") %>'>
<ItemTemplate>
<p><%# DataBinder.Eval(Container.DataItem, "pub_id") %>
<%# DataBinder.Eval(Container.DataItem, "title_en") %></p>
</ItemTemplate>
</asp:Repeater>
<asp:Repeater runat="server" EnableViewState="false"
DataSource='<%# GetChildRelation(Container.DataItem, "ParentChild") %>'>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "category_id") %>
<%# DataBinder.Eval(Container.DataItem, "cat_name_en") %><br />
<asp:Repeater runat="server" EnableViewState="false"
DataSource='<%# GetChildRelation(Container.DataItem, "CategoryMembers") %>'>
<ItemTemplate>
<p><%# DataBinder.Eval(Container.DataItem, "pub_id") %>
<%# DataBinder.Eval(Container.DataItem, "title_en") %></p>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
一部のカテゴリには子カテゴリがなくても出版物があるため、このようにリピーターをネストしました。
したがって、Children カテゴリを取得し、そのカテゴリに属するすべての出版物を取得するための関係を用意しました。カテゴリのリストとその子、およびそのカテゴリに属するすべての出版物を取得します。
問題は、一部の子カテゴリが親として扱われるのを防ぐ方法がわからないことです。親がなくても出版物があるカテゴリがいくつかあります。これらのカテゴリは、その親の下に正しく表示され、再び独自の親カテゴリとして表示されます
子カテゴリが親のように扱われないようにテーブルまたはリレーションを構成するにはどうすればよいですか?