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:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 57px; POSITION: absolute; TOP: 54px" runat="server" AllowCustomPaging="True" AllowPaging="True">
<PagerStyle Visible="False"></PagerStyle>
</asp:DataGrid>
<asp:Panel id="Panel1" style="Z-INDEX: 102; LEFT: 60px; POSITION: absolute; TOP: 20px" runat="server" Width="634px">
<MK:PageChange id="pc" runat="server"></MK:PageChange>
</asp:Panel><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 
======================================================

解决方案 »

  1.   

    声明一下:
    这是一个针对DataGrid的自定义分页的UserControl,前面看到有朋友问,就想做一个,当然这是没有规划过的,你copy完以后几乎不用改变什么东西就可以用了,但是代码写的非常乱,包括变量命名等等都很烂...贴上来只是希望能抛砖引玉,希望大家能写的更好,而不是拿现成的...-_-P.S:尤其存储过程希望大家能注意,因为Authors表数据不多所以我没有对存储过程发太多的注意,如果你有大批的数据,这个存储过程很关键的
      

  2.   

    我的分页方法:代码不贴出来了,不在这
    从 DataSet 里提取一个 DataTable ,
    就根据这个 DataTable 的Rows[i]是i来指定行段,
    既可以根据这个 i 的最大值来设定每页的记录;
    取得总记录;总页数;……有无人这样做过?还刚受一专家的启发的点子:
    单纯利用 Sql 的 top 语句来做……还有更好的方法吗? 我真的不喜欢用这个 DataGrid 的分页……
      

  3.   

    我用了一个最简单的方法解决DataGrid分页的问题
    就是在DataBind()时用
    try
    {
    DataGrid.dataBind()
    }
    catch
    {
    if(当前页>=总页数)
    当前页=总页数-1
    else
    {
    当前页=0
    }
    }
      

  4.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbwlkWalkthroughDisplayingDataInListBoxesOnWebFORMsPage.asp
    简单使用Select top n的分页用法,局限性,还有相关使用DataSet的效率说明,使用SqlDataReader效率是最高的,但是也是最复杂的,当然是相对来说
      

  5.   

    在.net的帮助中有这个例子的中文版,我看过的。
    ms-help://MS.VSCC/MS.MSDNVS.2052/Vbcon/html/vbwlkWalkthroughDisplayingDataInListBoxesOnWebFormsPage.htm
    因为它是通过在程序中通过定位ID来实现的,所以我觉的不太使用,我还是希望能通过存储过程实现大部份的工作。