【问题标题】:Displaying partially hierarchical data with nested repeaters使用嵌套转发器显示部分分层数据
【发布时间】:2010-10-14 04:40:10
【问题描述】:

我很接近,但到目前为止。 我有两张表,一张用于发布详细信息,另一张用于类别邻接列表。

我正在尝试显示带有嵌套中继器的完整数据集(除非有更好的方法) 我正在构建我的数据集,如下所示:

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>

我已经像这样嵌套了转发器,因为有些类别没有子类别,但仍有出版物。

所以我已经建立了关系来获取任何儿童类别,然后获取属于该类别的任何出版物。 我得到了包含他们的孩子的类别列表以及属于该类别的任何出版物。

问题是我不知道如何防止某些儿童类别被视为父母。有些类别没有父母,但仍然有出版物。这些类别将在其父类别下正确显示,然后再次作为其自己的父类别显示

如何配置表或关系,使子类别不被视为父母?

【问题讨论】:

  • 这是一篇关于嵌套中继器控件以显示分层数据的详细文章goo.gl/I37Nuj

标签: c# sql-server-2005 nested nested-repeater


【解决方案1】:

首先,您需要使用“parent_id is null”或 parent_id = '' 的 RowFilter 创建一个 DataView,具体取决于数据是什么

接下来绑定该数据视图而不是表。

例如

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

categoryRepeater.DataSource = dv;

您不必触摸 GetChildRelation 函数,因为它仍会从 Container.DataItem 获取 DataRowView

【讨论】:

  • 是的,就是这样。我有一种感觉,它会是那样的小东西。非常感谢。
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2020-01-28
  • 2015-10-11
  • 2012-12-26
  • 1970-01-01
  • 2015-10-02
相关资源
最近更新 更多