2010-05-03 139 views
0

我想显示一个DataTable的内容,根据其中一列的值分成几个组。所以,如果我有一个数据表(从SQL查询)有:ListView:显示数据分组?

GroupID Name Description 
1   foo bar 
1   one two 
2   some thing 

我想将装有1组ID的所有记录在一个DIV,有2组ID的所有记录在另一个div等。我怎样才能做到这一点?

我在ASP.NET 4.0中编写,使用C#代码隐藏。

回答

0

您可以使用LINQ to DataSet在数据绑定之前对您的数据进行分组。沿

var query = from row in myDataTable.AsEnumerable() 
      group row by row["GroupID"] // appropriate column access code here 
      select row; 

线的东西。然后你需要嵌套列表视图(code blatantly copied from here)实际呈现它。东西沿线

<asp:ListView runat="server" ID="outer" ItemPlaceholderID="PlaceHolder2"> 
    <LayoutTemplate> 
     <asp:PlaceHolder runat="server" ID="PlaceHolder2" /> 
    </LayoutTemplate> 

    <ItemTemplate> 
     <h1>[Some heading if you'd like one]</h1> 

     <asp:ListView runat="server" ID="inner" 
      ItemPlaceholderID="PlaceHolder3" 
      DataSource="<%# Container.DataItem %>"> 
      <LayoutTemplate> 
      <ul> 
       <asp:PlaceHolder runat="server" ID="PlaceHolder3" /> 
      </ul> 
      </LayoutTemplate> 
      <ItemTemplate> 
      <!-- data goes here --> 
      </ItemTemplate> 
     </asp:ListView> 
    </ItemTemplate> 
</asp:ListView> 
+0

这听起来像我想要的东西,但我不能为我的生活解密“var query =”代码。你能解释一下吗? – jbreed 2010-05-03 22:54:02

+0

@jawonlee:'var query = ...'是Linq http://msdn.microsoft.com/en-us/netframework/aa904594.aspx。这里还有一些示例(http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx)。基本上Linq是一种内置于C#3中的查询语法。除了可以在评论中解释的内容之外,还有一些其他内容,但是本网站和MSDN上有很多关于它是什么以及如何使用它的很好的信息。 – R0MANARMY 2010-05-03 23:37:36

0
foreach(DataRow r in myDataTable.Filter("GroupID = 1")) 
{ 
    //write out contents of div1 
} 

foreach(DataRow r in myDataTable.Filter("GroupID = 2")) 
{ 
    //write out contents of div2 
} 
+0

谢谢。但是,组ID的组动态变化,我需要显示的组数也是如此。有没有办法自动生成多个ListViews? – jbreed 2010-05-03 21:09:18

+0

@jawonlee:好的,做另一个查询,获取不同的GroupID列表。然后遍历整个过程,并在上面的foreach中使用每个GroupID作为过滤标准。 – RedFilter 2010-05-03 21:19:02