Я ТАК близко, но пока.У меня есть две таблицы, одна для подробностей публикации, другая для списка смежности категорий.
Я пытаюсь отобразить полный набор данных с вложенными повторителями (если нет лучшего способа), и я строюмой 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>
Я вложил такие повторители, потому что некоторые категории не имеют дочерних категорий,но по-прежнему есть публикации.
Итак, у меня есть «Отношения», чтобы получить любые категории «Дети», а затем получить любые публикации, относящиеся к этой категории.Я получаю список категорий со своими детьми и любые публикации, относящиеся к этой категории.
Проблема в том, что я не могу понять, как предотвратить, чтобы некоторые категории детей рассматривались как родители.Есть некоторые категории, у которых нет родителей, но есть публикации.Эти категории будут правильно отображаться под своим родителем, а затем СНОВА как их собственная родительская категория
Как настроить таблицы или отношения, чтобы дочерние категории не рассматривались как родители?