2012-04-27 45 views
0

我需要爲DataList中的每個項目創建按鈕,但最後一個按鈕需要以不同方式格式化,所以需要應用不同的css類。如何訪問DataList中的最後一項以設置其類?

我認爲這應該在OntemDataBound方法中完成,但如果我錯了,隨時糾正我。

我想要做這樣的事情:

protected void dlDataList_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    if (e.Item.ItemIndex == dlDataList.Items.Count - 1) //This doesn't work like I'd hoped 
    { 
    Panel button = (Panel)e.Item.FindControl("btnButton"); 
    button.CssClass = ("altClass"); 
    } 
    ... 
} 

的問題是,我不認爲在DataList知道它有多少項在ItemDataBound事件,因爲dlDataList.Items.Count總是與ItemIndex相同。

關於如何給altClass css類的最後一個按鈕的任何想法?

回答

2

在綁定DataList之前,保存頁面級別變量中的項目總數。然後在你的ItemDataBound上,檢查當前索引是否等於總項目(當然是-1)並相應地設置你的css類

0
for (int i=0; i<= DataList1.Items.Count; i++) 
{ 
    if (e.Item[i] == dlDataList.Items.Count - 1) //This doesn't work like I'd hoped 
    { 
     Panel button = (Panel)e.Item.FindControl("btnButton"); 
     button.CssClass = ("altClass"); 
     } 
} 
+0

攪拌而成; d。但我更改了一些行 – 2015-06-21 21:06:55

0

一般指標都是零基礎,所以在5個元素列表的最後一個元素的索引將是4和計數5,所以如果你從我認爲計數減1,將工作

+0

對,我忘了在寫代碼時忘記-1。但是dlDataList.Items.Count的值隨着每行而改變,所以仍然不起作用。 – Girbot 2012-04-27 23:03:29

0

您需要查詢DataList的DataSource而不是它的項目,因爲項目是在數據綁定之前創建的。

protected void dlDataList_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     // use the item's DataItem property or the DataList's DataSource property directly 
     DataTable tbl = ((DataRowView)e.Item.DataItem).Row.Table; 
     if (e.Item.ItemIndex == tbl.Rows.Count - 1) 
     { 
      // .... 
     } 
    } 
} 
0

對於數據源中的每個對象都會觸發ItemDataBound事件。所以每當一個項目被添加到數據列表中時,它的索引是1,而且是你的計數,所以它們不變。您應該對數據列表數據源屬性進行比較,並從中獲取數據。數據源預先知道你的列表有多大。您只需將數據源轉換爲數據綁定的對象即可。 所以,如果它是一個List<string>你會使用類似:

if (e.Item.ItemIndex == ((List<string>)dlDataList.DataSource).Count - 1)

+0

dlDataList.DataSource在ItemDataBound事件中爲null,但我在數據源的Selected事件中使用它來存儲返回的行數。 – Girbot 2012-04-27 23:40:06

+0

在我的測試中它不爲空,但我不確定你是如何綁定你的數據的。無論如何,很高興它很有用。 – totaldis 2012-04-28 02:09:45

相關問題