jjccx

jjccx's blog
posts - 28, comments - 90, trackbacks - 5, articles - 66
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

ASP.NET分页控件

Posted on 2005-08-20 17:32 jjccx 阅读(1262) 评论(5)  编辑 收藏 所属分类: C#

        闲来无事,研究了下Dino Esposito大师的MsdnSqlPager(创建用于 ASP.NET 的分页程序控件),写了个自己的分页控件,运行界面如下:


        使用的时候,提供ControlToPaginate(数据容器的控件的名字,可以为DataGrid,DataList,ListBox等等,只要该控件可以进行数据绑定),必需两个很重要的事件:
DataRequested:获取数据
TotalCountRequested:获取数据条目数目
还需要注意的一个是:PagingMode,该属性确定数据是缓存还是不缓存而每页都到数据库中去取。比如当你有一个分页存储过程的时候,就需要设置PagingMode为NonCached。

下面是一个演示的代码:
<TABLE id="Table1" cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
 <TR>
  <TD align="center"><asp:datagrid id="DataGrid1" runat="server" BorderStyle="None" BorderColor="#CC9966" BorderWidth="1px"
    BackColor="White" CellPadding="4">
    <FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
    <SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
    <ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
    <PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
   </asp:datagrid></TD>
 </TR>
 <TR>
  <TD align="center"><cc1:pager id="Pager1" runat="server" ControlToPaginate="DataGrid1" ItemsPerPage="9" PagingMode="NonCached"
    NumbericButtonCount="9"></cc1:pager></TD>
 </TR>
</TABLE>
在代码文件中:
  private void Page_Load(object sender, System.EventArgs e)
  {
   if(this.IsPostBack)
    return;

   this.Pager1.DataBind();//这里。。。
  }

  //这里。。。
  private DataTable Pager1_DataRequested(object sender, JJCCX.WebControls.DataRequestedEventArgs e)
  {
   if(e.RequestedMode == JJCCX.WebControls.DataRequestedMode.All)
   {
    DataTable dt = "SELECT ID, Name, MyPassword AS Password FROM TEST1";
    return dt;
   }
   else if(e.RequestedMode == JJCCX.WebControls.DataRequestedMode.Page)
   {
     DataTable dt = GetPageItems("SELECT ID, Name, MyPassword AS Password FROM TEST1 ORDER BY ID",  e.PageIndex,  e.ItemsPerPage);
     return dt;
   }

   return null;
  }

 //这里。。。
 private int Pager1_TotalCountRequested(object sender, EventArgs e)
  {
   string sql = "SELECT COUNT(ROWID) FROM TEST1";
   object o = ExecuteScalar(CommandType.Text, sql);
   return Convert.ToInt32(o);
  }

表 :可以由 Pager 控件进行分页的数据绑定控件

控件 说明
CheckBoxList ListControl 派生而来,显示为复选框列表。
DropDownList ListControl 派生而来,显示为字符串下拉列表。
ListBox ListControl 派生而来,显示为字符串可滚动列表。
RadioButtonList ListControl 派生而来,显示为单选按钮列表。
DataList BaseDataList 派生而来,显示为模板化数据项目列表。
DataGrid BaseDataList 派生而来,显示为数据项目的表格网格。DataGrid 是唯一一个内置有功能强大的分页引擎的 ASP.NET 控件。
Repeater  

Feedback

#1楼 [楼主]   回复  引用  查看    

2005-08-20 17:36 by jjccx      
下载该控件(Source Code And Library)
如果发现bug,请通知我一声,谢谢!

#2楼    回复  引用    

2006-02-10 10:34 by TangCQ [未注册用户]
在脚本里面写this.Pager1.DataBind();
页面的分页控件会消失。

#3楼    回复  引用    

2006-03-23 22:45 by painie [未注册用户]
我机器上没有SQL-SERVER,因此没试验运行过该控件,可在SqlPager.cs中我就搜索到一个Connection的Open()方法,是为计算项目数的,真不知没有Open()方法,该控件是怎样Select数据的,可你居然运行出来了,能告诉我原因吗?

#4楼    回复  引用    

2008-07-29 10:32 by 邹云虎 [未注册用户]
能自己定义数据库连接吗??

#5楼    回复  引用    

2008-08-02 16:02 by Sail [未注册用户]
GetPageItems
这个是什么东西啊,

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-12-16 18:20 编辑过


相关链接: