DataGrid的自定义分页UserControl

datagrid|分页

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> 
<asp:linkbutton id="PrevPage" runat="server">[上一页]</asp:linkbutton> 
<asp:linkbutton id="NextPage" runat="server">[下一页]</asp:linkbutton> 
<asp:linkbutton id="LastPage" runat="server">[末 页]</asp:linkbutton> 
<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> 
<asp:button id="NewPageGo" runat="server" Text="Go"></asp:button> </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">
<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
)

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

时间: 2024-09-17 04:11:28

DataGrid的自定义分页UserControl的相关文章

ASP.NET中利用DataGrid的自定义分页功能

asp.net|datagrid|分页 ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现

自定义分页UserControl 分享及探讨!

分页 ----------Pager.ascx-------------------------------------<%@ Control Language="c#" AutoEventWireup="false" Codebehind="Test.Pager.ascx.cs" Inherits="Pager" TargetSchema="http://schemas.microsoft.com/intel

DataGrid自定义分页

datagrid|分页 ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍

为DataGrid自定义分页添加自定义导航和分页信息

datagrid|分页 在上一篇文章中我讲到了对DataGrid实行自定义分页,这可以避免为了显示一页数据而获取整个数据记录集,从而提高分页效率,不过使用的导航还是DataGrid自带的数字连接或简单的上一页,下一页,而且看不到总页数.总记录数之类的信息.下面就为他增加我们所需要的部分. 先来看看修改后的分页显示,截图如下: (图一) 使用的数据源同上一篇文章(Asp.net中DataGrid控件的自定义分页)相同,都是访问Northwind库,为了独立开来这里还是把存储过程列了一下, CREA

如何在DataGrid控件中实现自定义分页_自学过程

如何在DataGrid控件中实现自定义分页      在一般情况下,DataGrid控件每次实现翻页操作时,都会将数据源中的数据重新调用一次,当数据中 数据很多时,这样做就会很浪费系统资源和降低程序的执行效率.这时候我们一般通过自定义分页来解 决这个问题.     DataGrid控件的AllowCustomPaging属性用来获取或设置DataGrid控件是否允许自定义分 页;VirtualItemCoun属性用来获取或设置在使用自定义分页时DataGrid中实际的项数.要实现自定义分 页,必

基于ASP.NET的自定义分页显示

asp.net|分页|显示 摘要:本文针对WEB数据库记录的显示问题,用实例讨论了在ASP.NET框架下使用DataGrid控件对数据库记录的一种自定义分页显示. 关键词:WEB数据库:ASP.NET:DataGrid:分页 引言 在用户进行数据查询时通常有这样的情况,一个数据库查询将返回太多的行,一致不能在一页中显示.如果用户正在使用一个慢的链接,发送特别大的数据结果可能要花很长的时间.一旦获得了数据,用户可能发现它不包含正确的内容,或者查询范围太大,没有容易的办法检查完所有的结果来找到重要的

ASP.NET 2.0在SQL Server 2005上自定义分页

出处:http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/031506-1.aspx 介绍 web开发中普遍会用页面来显示数据.比起整页显示一张报表或者一张数据表的数据给用户,开发者经常用到的是分页显示,每页只显示部分数据,用翻页来控制.在ASPV.NET 1.X里,DataGrid控件使翻页显示变得简单-只需要把属性AllowPaging设置为"true",并在PageIndexChanged事件中

miniui datagrid的客户端分页解决方案

官方的解决方案 官方在"在线示例"中给了一个简单的 client pagination 解决方案,代码就不贴了,这里说说它的基本思想和处理过程. 首先,是绑定一个 preload 事件,在这个事情中设置 event.cancel = true,阻止 datagrid 在翻页的时候向服务器请求加载数据. 那么数据从哪来呢?当然只有在外部写一个 ajax 过程获取了.不过取得的数据并不直接交给 datagrid,而是缓存起来,放在dataResult 中. 现在继续说 preload,除了

DataGrid同时具有分页和排序功能及注意点

datagrid|分页|排序 当DataGrid同时具有分页和排序功能时应注意在重新绑定数据源时,MyDataGrid.CurrentPageIndex=0;下面给实现以上功能的原码,也就不多缀了aspx中包含有DataGrid和控制其数据源变化的dropdownlistDataGrid代码 <asp:datagrid id="MyDataGrid" runat="server" BorderColor="#CCCCCC" Font-Siz