2011-08-23 39 views
0

我用ASP中繼器創建了一個ASP.net網頁。我將ASP Repeater與IOrderedEnumerable<int> DataSource綁定。爲什麼在Page_Load處理程序中DataItem始終爲空?

我需要訪問Page_Load事件處理程序內部的Repeater DataItems。但是,當我嘗試獲得repeater.Items[x].DataItem的值時,我總是得到空值。這裏應該總是有一個整數值。

儘管如此,頁面可以正常顯示。爲什麼我無法訪問Page_Load事件處理程序中的RepeaterItems的DataItem屬性?

+0

爲什麼你不直接訪問你的收藏?沒有理由只能通過DataItem屬性訪問該項目。 – oscilatingcretin

回答

2

您的Repeater在頁面生命週期的後期纔會綁定數據。如果你想在一個Page.Load處理引用Repeater.Items[i].DataItem,儘量早期綁定的Repeater第一:

repeater.DataBind() 
+0

我曾嘗試調用'.DataBind()'似乎沒有任何改變。 –

+0

我在測試中嘗試過這種方式,並且在實現'IOrderedEnumerable '作爲數據源時遇到了麻煩。我對LINQ不是很熟悉,我認爲你的問題可能集中在使用這種類型的數據源。我用LINQ重申了這個問題,希望在這個問題上能得到更多的回答者。 – pseudocoder

0

其綁定時可用。

+0

我試圖在頁面生命週期的所有不同點上訪問它。在DataBinding中只能訪問它似乎是非常隨意的... –

0

正如其他人所說,它只在數據綁定期間可用。您需要連接中繼器的OnItemDataBound事件。在其事件處理程序中,您可以這樣做:

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    switch (e.Item.ItemType) 
    { 
     case ListItemType.Item: 
     case ListItemType.AlternatingItem: 
      WhateverType Item = e.Item.DataItem as WhateverType; 
      break; 
    } 
} 
0

數據項僅在數據綁定過程發生後才存在。在轉發器中回發中保留的唯一東西是在視圖狀態中序列化的控件屬性。如果您需要這些項目中的數據,您可以儘早使用僞代碼表示和數據綁定,或者如果這不可行,您可以編寫一個實用程序函數,該函數需要中繼器數據項並從中繼器的控件中提取它(假設您存儲了全部您需要在這些控件中以某種方式獲得的信息)

相關問題