儿童中继器的项目数

时间:2012-03-30 23:23:22

标签: c# asp.net

我试图让孩子中继器的项目计数,但由于某种原因它不断上升为零。这是我的代码:父中继器是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
    }
}

我做错了什么?数据有效并填充。我唯一能想到的是我没有正确访问儿童中继器。

3 个答案:

答案 0 :(得分:5)

您无法在标题(e.Item.ItemType == ListItemType.Header)中获取项目计数。项目将按以下顺序创建:

  1. 标题
  2. 1.项目ItemCreated(由于尚未数据绑定,因此计数= 0)
  3. 1.项目ItemDataBound(自创建第一个项目以来数量= 1并且数据绑定)
  4. 2.项目ItemCreated(由于尚未数据绑定,因此计数= 1)
  5. 2.项目ItemDataBound(自第二项创建以来数量= 2且数据绑定) ....
  6. 所以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;
        }
    }
    

答案 1 :(得分:0)

您可能必须在第一个数据绑定事件中绑定嵌套转发器

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

这可能会有所帮助。 http://www.mostlylucid.co.uk/articles/nestedrepeaters.htm

答案 2 :(得分:-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