将datalist拆分为多个部分

时间:2011-05-31 04:57:38

标签: c# .net asp.net datalist

在我的数据主义者中,我想创建一个分隔,将每个ItemTemplate除以新的一年,当一年不同时。

我使用以下方式选择我的数据:

MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM code_post", dbcon);

在此字段中,date表示创建的年份。例如2011年,2010年,2009年。

如果出现不同年份,我怎样才能成为新年分部的标题?

3 个答案:

答案 0 :(得分:0)

截至目前,数据处于平面层次结构中,如List<DataObject>。您可以使用Linq或for循环在Dictionary<int,List<DataObject>>中创建它,其中字典键中的每个条目都是年份值,Value将是该年的Dataobject列表。比你的转发器里面应该有一个转发器然后将这个Dictionary对象绑定到外转发器,内转发器数据源应该是DataItem.Value(即绑定到外转发器数据项的当前KeyValue对的Value部分)。

这不是一个答案,你可以直接复制/粘贴,但我希望你有这个想法

答案 1 :(得分:0)

我也遇到过这样的情况。

我做的是......

我带了一个转发器,从数据库中取出DISTINCT年。 拿一个HiddenField并将这一年保存在DataList内的<ItemTemplate>内。

<asp:HiddenField ID="hfYear" runat="server" Value='<%#Eval("year")%>' />

然后使用转发器的ItemDataBound,我首先搜索了DataListHiddenField,并通过从{{1}传递年份,用另一种方法绑定了DataList }。

OnitemDataBound使用

HiddenField

唯一的缺点是数据库有多次往返(不同年份的数量=到数据库的次数)。

答案 2 :(得分:0)

我解决这个问题的方法是一次到数据库,然后使用

这样的代码
private String previousYear;
public string outputHeader(object y){
  String year = y.ToString();
   if(!previousYear.equals(year)){
      previousYear = year;
      return year;
   }
   return "";
}

在项目模板中我做了

<%# outputHeader(Eval("date")) %>

这允许一次访问DB,并且比以前建议的方法更有效/灵活