在我的数据主义者中,我想创建一个分隔,将每个ItemTemplate
除以新的一年,当一年不同时。
我使用以下方式选择我的数据:
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM code_post", dbcon);
在此字段中,date
表示创建的年份。例如2011年,2010年,2009年。
如果出现不同年份,我怎样才能成为新年分部的标题?
答案 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
,我首先搜索了DataList
和HiddenField
,并通过从{{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,并且比以前建议的方法更有效/灵活