儿童中继器';s项目计数
本文关键字:项目 中继器 | 更新日期: 2023-09-27 18:29:30
我正在尝试获取子中继器的项目计数,但由于某种原因,它一直为零。这是我的代码:父中继器是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.
项ItemCreated
(计数=0,因为尚未数据绑定)1.
项目ItemDataBound
(自创建并数据绑定第一个项目以来计数=1)2.
项ItemCreated
(计数=1,因为尚未数据绑定)2.
项目ItemDataBound
(自第二个项目创建并数据绑定以来计数=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