在我的数据列表中,我希望创建一个分隔,将每个ItemTemplate
分隔为新的一年,即发生不同年份。将数据列表拆分为
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM code_post", dbcon);
而且这个领域内,一个date
表示它的创建年份:
我用我的选择数据。例如2011年,2010年,2009年。
当不同年份发生时,如何制作新一年的标题?
在我的数据列表中,我希望创建一个分隔,将每个ItemTemplate
分隔为新的一年,即发生不同年份。将数据列表拆分为
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM code_post", dbcon);
而且这个领域内,一个date
表示它的创建年份:
我用我的选择数据。例如2011年,2010年,2009年。
当不同年份发生时,如何制作新一年的标题?
我解决了,这是通过使一个访问数据库,并具有代码,如
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,并且比先前建议的方法更高效/更灵活
截至目前,数据处于平面层次结构,即类似于List<DataObject>
。您可以使用Linq或for-loops在Dictionary<int,List<DataObject>>
中进行设置,其中字典键中的每个条目都是年份值,值将是该年的Dataobject列表。与您的中继器应该有一个中继器,然后将此Dictionary对象绑定到外部中继器,并且内部中继器数据源应该是DataItem.Value(即绑定到外部中继器数据项的当前KeyValue对的Value部分)。
这是不是一个答案,你可以直接复制/粘贴,但我希望你有这个想法
我也曾经有过这样的状况的遭遇。
我做什么...
我参加了一个中继器和获取的DISTINCT
年从数据库中。 以HiddenField
为例,并将与<ItemTemplate>
一起保存在这里。
<asp:HiddenField ID="hfYear" runat="server" Value='<%#Eval("year")%>' />
然后使用Repeater的ItemDataBound
,我首先关注DataList
和HiddenField
,并从HiddenField
经过一年绑定是DataList
用另一种方法。
OnitemDataBound使用
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
HiddenField hf = (HiddenField)e.Item.FindControl("hfYear");
DataList dl = (DataList)e.Item.FindControl("yourDataListID");
yourDataListBindMethod(hf.Value);
}
唯一的缺点在此是有多次往返于所述数据库(的不同的年数=旅行到数据库数)。