事实上这个问题出现在我为Repeater控件添加分页功能时。情况是这样的:
<
footertemplate
>
< tr >
< td colspan ="9" >
< asp:panel ID ="PageRow" Runat ="server" EnableViewState ="True" >
共
< asp:label ID ="PageRowsCount" Runat ="server" ></ asp:label > 条记录,当前第
< asp:label ID ="PageIndex" Runat ="server" ></ asp:label > 页/
< asp:label ID ="PageCount" Runat ="server" ></ asp:label > 页
</ asp:panel >
</ td >
</ tr >
</ footertemplate >
< tr >
< td colspan ="9" >
< asp:panel ID ="PageRow" Runat ="server" EnableViewState ="True" >
共
< asp:label ID ="PageRowsCount" Runat ="server" ></ asp:label > 条记录,当前第
< asp:label ID ="PageIndex" Runat ="server" ></ asp:label > 页/
< asp:label ID ="PageCount" Runat ="server" ></ asp:label > 页
</ asp:panel >
</ td >
</ tr >
</ footertemplate >
老规矩,多余的代码就不说了
这个Panel出于两方面考虑,一方面作为容器以获得里面的几个控件,另一方面使用它的div套用样式。
但是奇怪的是无论如何在Repeater里FindControl都没法得到它。
别着急,Controls实际上是Repeater的数据行集,
Footer总是在最后一个,So...
Panel pagepanel
=
(Panel)(typecontracts.Controls[typecontracts.Controls.Count
-
1
].FindControl(
"
PageRow
"
));
Label pagerowscount
=
(Label)pagepanel.FindControl(
"
PageRowsCount
"
);
int pagecount = list.RowsCount % pagesize > 0 ? list.RowsCount / pagesize + 1 : list.RowsCount / pagesize;
((Label)pagepanel.FindControl( " PageCount " )).Text = pagecount.ToString();
((Label)pagepanel.FindControl( " PageIndex " )).Text = ( list.PageIndex + 1 ).ToString();
for ( int i = 0 ; i < pagecount; i ++ )
{
System.Web.UI.WebControls.HyperLink link = new HyperLink();
link.Text = (i + 1 ).ToString();
link.NavigateUrl = " index.aspx?tid= " + contracttype.TypeID + " &sid= " + DContractStates.SelectedValue + " &pid= " + (i * pagesize + 1 ).ToString();
pagepanel.Controls.Add( link );
}
pagerowscount.Text = list.RowsCount.ToString();
int pagecount = list.RowsCount % pagesize > 0 ? list.RowsCount / pagesize + 1 : list.RowsCount / pagesize;
((Label)pagepanel.FindControl( " PageCount " )).Text = pagecount.ToString();
((Label)pagepanel.FindControl( " PageIndex " )).Text = ( list.PageIndex + 1 ).ToString();
for ( int i = 0 ; i < pagecount; i ++ )
{
System.Web.UI.WebControls.HyperLink link = new HyperLink();
link.Text = (i + 1 ).ToString();
link.NavigateUrl = " index.aspx?tid= " + contracttype.TypeID + " &sid= " + DContractStates.SelectedValue + " &pid= " + (i * pagesize + 1 ).ToString();
pagepanel.Controls.Add( link );
}
pagerowscount.Text = list.RowsCount.ToString();