2011-05-31 106 views
1

在我的数据列表中,我希望创建一个分隔,将每个ItemTemplate分隔为新的一年,即发生不同年份。将数据列表拆分为

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

而且这个领域内,一个date表示它的创建年份:

我用我的选择数据。例如2011年,2010年,2009年。

当不同年份发生时,如何制作新一年的标题?

回答

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,并且比先前建议的方法更高效/更灵活

0

截至目前,数据处于平面层次结构,即类似于List<DataObject>。您可以使用Linq或for-loops在Dictionary<int,List<DataObject>>中进行设置,其中字典键中的每个条目都是年份值,值将是该年的Dataobject列表。与您的中继器应该有一个中继器,然后将此Dictionary对象绑定到外部中继器,并且内部中继器数据源应该是DataItem.Value(即绑定到外部中继器数据项的当前KeyValue对的Value部分)。

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

0

我也曾经有过这样的状况的遭遇。

我做什么...

我参加了一个中继器和获取的DISTINCT年从数据库中。 以HiddenField为例,并将与<ItemTemplate>一起保存在这里。

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

然后使用Repeater的ItemDataBound,我首先关注DataListHiddenField,并从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); 
} 

唯一的缺点在此是有多次往返于所述数据库(的不同的年数=旅行到数据库数)。