DataGrid的自定义分页UserControl

PageChange.ascx
================================================================
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="PageChange.ascx.cs" Inherits="Ex_Test.PageChange" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<FONT face="宋体">
     <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="98%" border="0">
          <TR>
               <TD align="right"><asp:linkbutton id="FirstPage" runat="server">[首 页]</asp:linkbutton>&nbsp;
                    <asp:linkbutton id="PrevPage" runat="server">[上一页]</asp:linkbutton>&nbsp;
                    <asp:linkbutton id="NextPage" runat="server">[下一页]</asp:linkbutton>&nbsp;
                    <asp:linkbutton id="LastPage" runat="server">[末 页]</asp:linkbutton>&nbsp;
                    <asp:literal id="Literal1" runat="server" Text="转到第"></asp:literal><asp:textbox id="NewPageIndex" runat="server" Width="31px"></asp:textbox><asp:literal id="Literal2" runat="server" Text="页"></asp:literal>&nbsp;
                    <asp:button id="NewPageGo" runat="server" Text="Go"></asp:button>&nbsp;</TD>
          </TR>
     </TABLE>
</FONT>
=======================================================================


PageChange.ascx.cs
===================================================================
namespace Ex_Test
{
     using System;
     using System.Data;
     using System.Drawing;
     using System.Web;
     using System.Web.UI.WebControls;
     using System.Web.UI.HtmlControls;
     using System.Data.SqlClient;

     /// <summary>
     ///           PageChange 的摘要说明。
     /// </summary>
     public abstract class PageChange : System.Web.UI.UserControl
     {
          protected System.Web.UI.WebControls.Button NewPageGo;
          protected System.Web.UI.WebControls.Literal Literal2;
          protected System.Web.UI.WebControls.TextBox NewPageIndex;
          protected System.Web.UI.WebControls.Literal Literal1;
          protected System.Web.UI.WebControls.LinkButton LastPage;
          protected System.Web.UI.WebControls.LinkButton NextPage;
          protected System.Web.UI.WebControls.LinkButton PrevPage;
          protected System.Web.UI.WebControls.LinkButton FirstPage;
          protected int currentpage;
          protected int pagesize;
          protected string proc;
          protected System.Web.UI.WebControls.DataGrid datagrid;


          public int _CurrentPage
          {
               get
               {
                    return currentpage;
               }
               set
               {
                    currentpage = value;
               }
          }

          public int _pageSize
          {
               get
               {
                    return pagesize;
               }
               set
               {
                    pagesize = value;
               }
          }

          public string _proc
          {
               get
               {
                    return proc;
               }
               set
               {
                    proc = value;
               }
          }

          public DataGrid _datagrid
          {
               get
               {
                    return datagrid;
               }
               set
               {
                    datagrid = value;
               }
          }

          protected int rowcount;
          private void Page_Load(object sender, System.EventArgs e)
          {
               // 在此处放置用户代码以初始化页面
               if(!IsPostBack)
               {
                    using(SqlConnection conn = new SqlConnection("User id=sa;password=admin;server=server-mk;initial catalog=pubs;timeout=90" )
                    {
                         SqlCommand cmd = new SqlCommand("select count(*) as expr1 from authors",conn);
                         cmd.Connection.Open();
                         rowcount = (int)cmd.ExecuteScalar();
                         cmd.Connection.Close();
                         ViewState["rowscount"] = rowcount;
                    }
                    ViewState["currentpage"] = currentpage;
                    FillGrid(proc,currentpage,pagesize,datagrid);
               }
          }

          #region Web Form Designer generated code
          override protected void OnInit(EventArgs e)
          {
               //
               // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
               //
               InitializeComponent();
               base.OnInit(e);
          }
         
          ///           设计器支持所需的方法 - 不要使用
          ///           代码编辑器修改此方法的内容。
          /// </summary>
          private void InitializeComponent()
          {
               this.FirstPage.Click += new System.EventHandler(this.FirstPage_Click);
               this.PrevPage.Click += new System.EventHandler(this.PrevPage_Click);
               this.NextPage.Click += new System.EventHandler(this.NextPage_Click);
               this.LastPage.Click += new System.EventHandler(this.LastPage_Click);
               this.NewPageGo.Click += new System.EventHandler(this.NewPageGo_Click);
               this.Load += new System.EventHandler(this.Page_Load);

          }
          #endregion

          private void FillGrid(string proc,int currentpage,int pagesize,DataGrid datagrid)
          {
               using(SqlConnection conn = new SqlConnection("User id=sa;password=admin;server=server-mk;initial catalog=pubs;timeout=90" )
               {
                    SqlCommand cmd = new SqlCommand(proc,conn);
cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@CurrentPage",currentpage);
                    cmd.Parameters.Add("@PageSize",pagesize);
                    cmd.Connection.Open();

                    SqlDataReader sdr = cmd.ExecuteReader();
datagrid.DataSource = sdr;
                    datagrid.DataBind();
                    sdr.Close();
                    cmd.Connection.Close();
               }
          }

          //首页
          private void FirstPage_Click(object sender, System.EventArgs e)
          {
               //disabled首页按钮和上一页按钮
               FirstPage.Enabled = false;
               PrevPage.Enabled = false;     
               currentpage = 0;
          ViewState["currentpage"] = currentpage;
               FillGrid(proc,currentpage,pagesize,datagrid);
               //如果不止一页
               if((int)ViewState["rowscount"]>((int)ViewState["currentpage"]+1)*pagesize)
               {
                    NextPage.Enabled = true;
               }
               if((int)ViewState["rowscount"]>((int)ViewState["currentpage"]+1)*pagesize)
               {
                    LastPage.Enabled = true;
               }
          }

          //上一页
          private void PrevPage_Click(object sender, System.EventArgs e)
          {

               NextPage.Enabled = true;
               LastPage.Enabled = true;
          currentpage = (int)ViewState["currentpage"]-1;
               ViewState["currentpage"] = currentpage;
               FillGrid(proc,currentpage,pagesize,datagrid);     
               //如果到首页则disabled首页和上一页按钮
               if((int)ViewState["currentpage"]==0)
               {
                    PrevPage.Enabled = false;
                    FirstPage.Enabled = false;
                    //return;
               }
          }

          //下一页
          private void NextPage_Click(object sender, System.EventArgs e)
          {
               ViewState["currentpage"] = (int)ViewState["currentpage"]+1;
               currentpage = (int)ViewState["currentpage"];
               FillGrid(proc,currentpage,pagesize,datagrid);
               PrevPage.Enabled = true;
               FirstPage.Enabled = true;
               //如果已经到了最后一页
               if(((int)ViewState["currentpage"]+1)*pagesize>(int)ViewState["rowscount"])
               {
                    NextPage.Enabled = false;
                    LastPage.Enabled = false;
               }
          }

          //末页
          private void LastPage_Click(object sender, System.EventArgs e)
          {
               LastPage.Enabled = false;
          NextPage.Enabled = false;
               ViewState["currentpage"] = (int)Math.Ceiling((int)ViewState["rowscount"]/pagesize);
               currentpage = (int)ViewState["currentpage"];
               FillGrid(proc,currentpage,pagesize,datagrid);
               //如果有不止一页的纪录
               if((int)ViewState["currentpage"]>1)
               {
                    FirstPage.Enabled = true;
                    PrevPage.Enabled = true;
               }
                    //如果只有一页的纪录
               else
               {
FirstPage.Enabled = false;
                    PrevPage.Enabled = false;
               }
          }

          //跳转
          private void NewPage_Go(string i)
          {
               try
               {
                    int PageIndex = Int32.Parse(i);
                    if (PageIndex<=0)
                    {
                         PageIndex = 0;
                    }
                    else
                    {
                         if(PageIndex>(int)Math.Ceiling((int)ViewState["rowscount"]/pagesize))
                         {
                              PageIndex = (int)Math.Ceiling((int)ViewState["rowscount"]/pagesize);
                         }
                         else
                         {
                              PageIndex--;
                         }
                    }
                    //简单起见,将所有的linkbutton全部改为enable=true
                    FirstPage.Enabled = true;
                    NextPage.Enabled = true;
                    LastPage.Enabled = true;
                    PrevPage.Enabled = true;
                    ViewState["currentpage"] = PageIndex;
                    FillGrid(proc,(int)ViewState["currentpage"],pagesize,datagrid);
               }
               catch(Exception)
               {
                    return;
               }
          }

          private void NewPageGo_Click(object sender, System.EventArgs e)
          {
          NewPage_Go(NewPageIndex.Text.Trim());
          }

     }
}

PageForm.aspx
==================================================================
<%@ Page language="c#" Codebehind="PageForm.aspx.cs" AutoEventWireup="false" Inherits="Ex_Test.PageForm" %>
<%@ Register TagPrefix="MK" TagName="PageChange" src="PageChange.ascx"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
     <HEAD>
          <title>PageForm</title>
          <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
          <meta name="CODE_LANGUAGE" Content="C#">
          <meta name="vs_defaultClientScript" content="JavaScript">
          <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
     </HEAD>
     <body MS_POSITIONING="GridLayout">
          <form id="PageForm" method="post" runat="server">
               <asp ataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 57px; POSITION: absolute; TOP: 54px" runat="server" AllowCustomPaging="True" AllowPaging="True">
                    <PagerStyle Visible="False"></PagerStyle>
               </asp ataGrid>
               <asp anel id="Panel1" style="Z-INDEX: 102; LEFT: 60px; POSITION: absolute; TOP: 20px" runat="server" Width="634px">
                    <MK ageChange id="pc" runat="server"></MK ageChange>
               </asp anel><FONT face="宋体"></FONT>
          </form>
     </body>
</HTML>
=================================================================

PageForm.aspx.cs
=================================================================
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Ex_Test
{
     /// <summary>
     /// PageForm 的摘要说明。
     /// </summary>
     public class PageForm : System.Web.UI.Page
     {
          protected System.Web.UI.WebControls.DataGrid DataGrid1;
          protected System.Web.UI.WebControls.Panel Panel1;
          protected Ex_Test.PageChange pc;
         
    
          private void Page_Load(object sender, System.EventArgs e)
          {
               // 在此处放置用户代码以初始化页面
               //if(!IsPostBack)
               //{
                    pc._CurrentPage = 0;
                    pc._datagrid = DataGrid1;
                    pc._pageSize =7;
                    pc._proc = "Page_Change";
               //}
          }

          #region Web Form Designer generated code
          override protected void OnInit(EventArgs e)
          {
               //
               // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
               //
               InitializeComponent();
               base.OnInit(e);
          }
         
          /// <summary>
          /// 设计器支持所需的方法 - 不要使用代码编辑器修改
          /// 此方法的内容。
          /// </summary>
          private void InitializeComponent()
          {
               this.Load += new System.EventHandler(this.Page_Load);

          }
          #endregion
     }

}
=================================================================
存储过程:
Create PROCEDURE dbo.Page_Change
/*
     (
          @parameter1 datatype = default value,
          @parameter2 datatype OUTPUT
     )
*/
(
@PageSize int,
@CurrentPage int
)

AS
     /* SET NOCOUNT ON */
    
     select *,IDENTITY(int,1,1) as Num into #TempAuthors from Authors
    
     select * from #TempAuthors where Num > (@PageSize*@CurrentPage) and Num < (@PageSize*@CurrentPage+@PageSize+1)
    
     RETURN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值