阅读:1418回复:1
[转帖]DataGrid的自定义分页UserControl
<P>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(); } } </P> [此贴子已经被作者于2004-11-4 10:43:56编辑过]
|
|
|
1楼#
发布于:2004-11-04 10:44
//首页
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"> <aspataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 57px; POSITION: absolute; TOP: 54px" runat="server" AllowCustomPaging="True" AllowPaging="True"> <PagerStyle Visible="False"></PagerStyle> </aspataGrid> <aspanel id="Panel1" style="Z-INDEX: 102; LEFT: 60px; POSITION: absolute; TOP: 20px" runat="server" Width="634px"> <MKageChange id="pc" runat="server"></MKageChange> </aspanel><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 ) |
|
|