[英]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.
Item ItemCreated
(計數= 0,因為尚未綁定數據) 1.
項目ItemDataBound
(自創建第一個項目並進行數據綁定以來,Count = 1) 2.
Item ItemCreated
(計數= 1,因為尚未進行數據綁定) 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.