2012-03-30 31 views
2

我想獲得兒童轉發器的項目數,但由於某種原因它保持爲零。這是我的代碼:家長中繼是rptDays。兒童中繼器是rptEditInfo。兒童轉發器的項目數

protected void rptDays_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater rptEditInfo = (Repeater)e.Item.FindControl("rptEditInfo"); 
     ... 
     DateTime thisDay = (DateTime)e.Item.DataItem; 
     DataSet ds = new DataSet(); 
     ... 
     ds = **bind valid dataset to this variable** 
     rptEditInfo.DataSource = MRSTable; 
     rptEditInfo.DataBind(); 
    } 

}

protected void rptEditInfo_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Header) 
    { 
     Repeater rpt2 = (Repeater)((Repeater)e.Item.Parent); 
     Repeater rpt1 = (Repeater)((Repeater)sender).Parent.FindControl("rptEditInfo"); 
     int countTest1 = rpt2.Items.Count //always zero 
     int countTest2 = rpt1.Items.Count //always zero 
    } 
} 

我在做什麼錯?數據有效且已填充。唯一我能想到的是我沒有正確地訪問兒童中繼器。

回答

5

您無法在標題中獲得項目數(e.Item.ItemType == ListItemType.Header)。中的項目將在此訂單中創建:

  1. 部首
  2. 1.項目ItemCreated(計數= 0,因爲尚未數據綁定)
  3. 1.項目ItemDataBound(計數= 1,因爲在第一項和數據綁定)
  4. 2.項目ItemCreated(計數= 1,因爲尚未數據綁定)
  5. 2.項目ItemDataBound(計數= 2,因爲第二項創建和數據綁定) ....

所以ItemDataBound不是爲了從Items財產或總數的合適的階段。但總是一個更好的方法是直接使用數據源,而不是統計項目(或GridView中的行)。

protected void rptEditInfo_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Header) 
    { 
     Repeater rpt = (Repeater)sender; 
     //note that this depends on your actual datasource, set a breakpoint and debug if you're unsure 
     var dataSource = (DataView)rpt.DataSource; 
     int count = dataSource.Count; 
    } 
} 
+0

非常感謝你爲這個啓示,它完全是有道理的。點和答案! – Lukas 2012-04-02 16:24:54

-1

您可以使用下面的參考代碼,並用它來解決你發出:

<<**** Global variable **************>> 
Public static int innerRepeaterCount=0; 

<<********* Your rptEditInfo_ItemDataBound event wiil be as follows*******>> 



protected void rptEditInfo_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    dv = e.Item.DataItem as DataRowView; 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     nestedRCountInInnerR = nestedRCount; 
     innerRepeaterCount++; 
    } 
} 


innerRepeaterCount will give you total item counts in inner Repeater