2011-05-31 110 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); 
} 

唯一的缺點在此是有多次往返於所述數據庫(的不同的年數=旅行到數據庫數)。