簡體   English   中英

兒童直放站的物品計數

[英]Child repeater's item count

我正在嘗試獲取兒童直放站的物品數,但由於某種原因,它一直保持為零。 這是我的代碼:父轉發器是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
    }
}

我究竟做錯了什么? 數據有效且已填充。 我唯一能想到的是我沒有正確訪問兒童直放站。

您無法在標題中獲得項目計數( e.Item.ItemType == ListItemType.Header )。 將按以下順序創建項目:

  1. 1. Item ItemCreated (計數= 0,因為尚未綁定數據)
  2. 1.項目ItemDataBound (自創建第一個項目並進行數據綁定以來,Count = 1)
  3. 2. Item ItemCreated (計數= 1,因為尚未進行數據綁定)
  4. 2.項目ItemDataBound (自創建第二個項目並進行數據綁定以來,Count = 2)...。

因此, ItemDataBound不是從Items屬性獲取總計數的正確階段。 但是總而言之,總有一種更好的方法是直接使用數據源,而不是對Items(或GridView Rows)進行計數。

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;
    }
}

您可能必須在第一個數據綁定事件中綁定嵌套的轉發器

rptEditInfo.ItemDataBound + =新的System.Web.UI.WebControls.RepeaterItemEventHandler(rptEditInfo_ItemDataBound);

這可能會有所幫助。 http://www.mostlylucid.co.uk/articles/nestedrepeaters.htm

您可以使用以下代碼,並用於解決問題:

<<**** 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM