2012-03-30 8 views
2

子リピーターのアイテム数を取得しようとしていますが、なんらかの理由で引き続き0になる場合があります。ここに私のコードです:親リピーターは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番目の項目が作成され、データバインドため= 2カウント) ....

のでItemDataBoundItemsプロパティから合計数を取得する権利の段階ではありません。しかし、常によりよいアプローチは、アイテム(または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

0

あなたはあなたの最初のデータバインドされたイベント

rptEditInfo.ItemDataBound + =新しいSystem.Web.UI.WebControls.RepeaterItemEventHandler(rptEditInfo_ItemDataBound)で、ネストされたリピータをバインドする必要がある場合があります。

これが役立ちます。 http://www.mostlylucid.co.uk/articles/nestedrepeaters.htm

-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 
関連する問題