2010-10-13 83 views
1

我很接近,但到目前爲止。 我有兩張表,一張用於發佈詳情,另一張用於類別鄰接列表。使用嵌套中繼器顯示部分分層數據

我想顯示完整的數據集嵌套的中繼器(除非有一個更好的辦法) 和我建立我的數據集,如下所示:

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") %>&nbsp; 
      <%# 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> 

我嵌套這樣的中繼器,因爲有些類別沒有子類別,但仍然有出版物。

因此,我已經建立了關係以獲取任何兒童類別,然後獲取屬於該類別的任何出版物。 我得到他們的孩子和屬於該類別的任何出版物的類別列表。

問題是我無法弄清楚如何防止一些兒童類別被視爲父母。有些類別沒有父母,但仍有出版物。這些類別將正確顯示在他們的父母下,然後再次作爲他們自己的父類別

如何配置表或關係,以便孩子類別不像父母那樣對待?

+0

這裏有嵌套直放站監控好看詳細的文章,以顯示分層數據 的http://咕。 gl/I37Nuj – 2015-08-19 05:13:57

回答

2

首先,您需要創建任一的RowFilter一個數據視圖「PARENT_ID爲空」或PARENT_ID =「」這取決於數據是

該數據視圖,而不是旁邊的桌子綁定。

例如

DataView dv = new DataView(_ds.Tables["category"]); 
dv.RowFilter = "parent_id is null"; 

categoryRepeater.DataSource = dv; 

你不應該碰你GetChildRelation功能,因爲它會仍然的Container.DataItem

得到DataRowView的
+0

是的,就是這樣。我有一種感覺,它會是這樣的小事。非常感謝。 – TomCDona 2010-10-13 20:44:20