繁体   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