哪种数据控制适用于该场景?

时间:2011-12-08 08:49:52

标签: asp.net listview

format the data should be displayed

伙计们我有一份工作来显示图片中给出的订阅者列表。我想知道ASP.NET中的哪个数据控件对于这种情况是完美的。我正在玩Listview,但我想从这里得到人们的意见。谢谢。 Faraaz。

Update1:​​我应该在这里使用网格视图列表(嵌套在列表视图中)吗?或者可以使用单个列表视图完成吗?

2 个答案:

答案 0 :(得分:1)

对我来说这是一个带有常用标题文本的GridView。上面的第一个栏可以在网格之前与任何其他控件或纯HTML一起制作。 ListViews不是网格,在我认为当最终预期结果更接近网格时不应该使用它

答案 1 :(得分:1)

显然,网格视图会为您提供所需的表格布局(可能只需要使用自动生成的列进行最少的工作)。

但是,如果需要进行分页,排序,编辑,那么我宁愿用户使用Repeater控件。主要原因是精确控制加价。例如,网格视图不支持<colgroup><thead>等元素(同样,您的布局可能不需要这些元素)。如果需要分页/排序/编辑等,那么ListView是更好的选择。

就显示多个表而言,您可以使用嵌套控件 - 例如,嵌套网格视图的转发器/列表视图。

修改
您不太清楚自己拥有的数据结构以及所需的确切布局。所以这就是我假设的 - 你有一个List<Subscriber>包含root订阅者和他们的孩子。在布局中,您需要一个用于root用户的表,后跟多个表 - 每个root用户的子节点一个。

标记将类似于

<asp:Repeater runat="server" ID="Outer" >
  <HeaderTemplate>
     <%-- Put a grid here for parent  -->
     <asp:GridView runat="server" ID="Root" DataSource='<%# GetRootSubscribers() %>' >
         ... column def etc
     </asp:GridView>
  </HeaderTemplate>
  <ItemTemplate>
     <!-- Put a grid here for children for current root subsriber -->
     <asp:GridView runat="server" ID="Child" DataSource='<%# GetChildSubscribers(Eval("MemberID")) %>' >
         ... column def etc
     </asp:GridView>
  </ItemTemplate>
</asp:Repeater>

这将由两个代码隐藏方法支持,例如

protected IEnumerable<Subscriber> GetRootSubscribers()
{
    // I am not sure how you decide if a subscriber is a parent or not, I have just 
    // illustrated a condition where you have a parent id field to indicate the same
    return allSubscribers.Where(s => s.ParentID == null);
}

protected IEnumerable<Subscriber> GetChildSubscribers(object memberId)
{
    // I am not sure how you decide a child subscriber, I have just 
    // illustrated a condition where you have a parent id field to indicate the same
    return allSubscribers.Where(s => s.ParentID.Equals(memberId));
}

// bind the outer repeater to root list
Outer.DataSource = GetRootSubscribers();
Outer.DataBind();

希望这会让你知道如何继续。