最近项目需求需要一个有分页功能的展示控件,由于数据量非常大GridView控件显得无能为力了。于是自己动手写了一个支持大量数据的分页展示控件GridTable(当然海量数据查询算法还要自己搞定),该控件继承repeater。
控件的数据源不是用datasource赋值,是要实现一个内部委托“ObjectDataSourceBindEventHandler(int startCount, int endCount)”,该方法定义两个变量,结果集的开始行号和结束行号,返回一个结果集对象从而实现分页功能。效果如下:
aspx文件部分代码
aspx代码
<wc1:GridTable ID="Grid1" runat="server" BannerTextFormat="每页{0}条/共{1}条 第{2}页/共{3}页"
PageSize="5" BannerCls="bannercls" PagerPosition="Both" PaginationCls="pagind"
PageImgBtUrl="btn4.gif" AllowPaging="true">
<PageTemplate>
<h1>
PageTemplate Show</h1>
</PageTemplate>
<HeaderTemplate>
<dl class="briefresult">
</HeaderTemplate>
<ItemTemplate>
<dt>
<img src="images/arr14.gif" width="18" height="17" /><a href="#"><%# Eval("name")%></a>
<span>health preserving yangsheng </span></dt>
<dd>
<%# Eval("info") %>
</dd>
<dd class="more">
<a href="#">阅读全文 >>></a></dd>
</ItemTemplate>
<FooterTemplate>
</dl></FooterTemplate>
<EmptyDataTemplate>
<h1>
EmptyData</h1>
</EmptyDataTemplate>
</wc1:GridTable>
PageSize="5" BannerCls="bannercls" PagerPosition="Both" PaginationCls="pagind"
PageImgBtUrl="btn4.gif" AllowPaging="true">
<PageTemplate>
<h1>
PageTemplate Show</h1>
</PageTemplate>
<HeaderTemplate>
<dl class="briefresult">
</HeaderTemplate>
<ItemTemplate>
<dt>
<img src="images/arr14.gif" width="18" height="17" /><a href="#"><%# Eval("name")%></a>
<span>health preserving yangsheng </span></dt>
<dd>
<%# Eval("info") %>
</dd>
<dd class="more">
<a href="#">阅读全文 >>></a></dd>
</ItemTemplate>
<FooterTemplate>
</dl></FooterTemplate>
<EmptyDataTemplate>
<h1>
EmptyData</h1>
</EmptyDataTemplate>
</wc1:GridTable>
后台.cs部分
.cs代码
protected void Page_Load(object sender, EventArgs e)
{
Grid1.ObjectDataSourceBind += new TPI.Web.UI.WebControls.GridTable.ObjectDataSourceBindEventHandler(Grid1_ObjectDataSourceBind);
if (!IsPostBack)
{
Grid1.DataBind();
}
}
{
……
return dt;
}
{
Grid1.ObjectDataSourceBind += new TPI.Web.UI.WebControls.GridTable.ObjectDataSourceBindEventHandler(Grid1_ObjectDataSourceBind);
if (!IsPostBack)
{
Grid1.DataBind();
}
}
object Grid1_ObjectDataSourceBind(int startCount, int endCount)
{
……
return dt;
}
不足
1、因为继承repeater,所以所有样式要自己定义 (表格的时候比较麻烦)
2、 没有ajax方式翻页(希望高手指点一下如何实现,不用updatepannel)
3、功能比较简单,需要进一步改进
代码发布出来欢迎拍砖 ,如果大家有什么好的建议望不啬赐教