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
======================================================
==================================================================
<%@ 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
======================================================
这是一个针对DataGrid的自定义分页的UserControl,前面看到有朋友问,就想做一个,当然这是没有规划过的,你copy完以后几乎不用改变什么东西就可以用了,但是代码写的非常乱,包括变量命名等等都很烂...贴上来只是希望能抛砖引玉,希望大家能写的更好,而不是拿现成的...-_-P.S:尤其存储过程希望大家能注意,因为Authors表数据不多所以我没有对存储过程发太多的注意,如果你有大批的数据,这个存储过程很关键的
从 DataSet 里提取一个 DataTable ,
就根据这个 DataTable 的Rows[i]是i来指定行段,
既可以根据这个 i 的最大值来设定每页的记录;
取得总记录;总页数;……有无人这样做过?还刚受一专家的启发的点子:
单纯利用 Sql 的 top 语句来做……还有更好的方法吗? 我真的不喜欢用这个 DataGrid 的分页……
就是在DataBind()时用
try
{
DataGrid.dataBind()
}
catch
{
if(当前页>=总页数)
当前页=总页数-1
else
{
当前页=0
}
}
简单使用Select top n的分页用法,局限性,还有相关使用DataSet的效率说明,使用SqlDataReader效率是最高的,但是也是最复杂的,当然是相对来说
ms-help://MS.VSCC/MS.MSDNVS.2052/Vbcon/html/vbwlkWalkthroughDisplayingDataInListBoxesOnWebFormsPage.htm
因为它是通过在程序中通过定位ID来实现的,所以我觉的不太使用,我还是希望能通过存储过程实现大部份的工作。