
1
.引言

1
.1目的

为适应大数据量分页的需要,为以后千万级数据分页提供解决方法或者参考,节省开发时间,特制定本详细设计方案

1
.2主要阅读对象

脚本设计人员

1
.3参考资料

http:
//
www.cnblogs.com/SGSoft/archive/2004/10/23/55800.html

2
.详细设计

2
.1分页存储过程

2.1
.1简介

2.1
.2分页存储过程代码

以下代码是网上找的分页存储过程,我是在原存储过程的基础上加了一个@IsCount bit
=
0
, 主要是用来返回纪录总数,当为非0值时返回。下面注释部分是原作者的测试部分。我在本机sql server 2005上的测试是在10000011纪录中查询第100000页,每页10条纪录按升序和降序时间均为0.38秒,测试语法如下:exec GetRecordFromPage tbl_Briefness,I_BriefnessID,
10
,
100000
,其中在tbl_Briefness表I_BriefnessID字段上建立了索引。


/**/
/**/
/**/
/*

经测试,在14483461 条记录中查询第100000 页,每页10 条记录按升序和降序第一次时间均为0.47 秒,第二次时间均为0.43 秒,测试语法如下:

exec GetRecordFromPage news,newsid,10,100000

news 为表名, newsid 为关键字段, 使用时请先对newsid 建立索引。


函数名称: GetRecordFromPage

函数功能: 获取指定页的数据

参数说明: @tblName 包含数据的表名

@fldName 关键字段名

@PageSize 每页记录数

@PageIndex 要获取的页码

@OrderType 排序类型, 0 - 升序, 1 - 降序

@strWhere 查询条件(注意: 不要加where)

创建时间: 2004-07-04

修改时间: 2008-02-13

*/

ALTER PROCEDURE [dbo].[GetRecordFromPage]

@tblName varchar(
255
),
--
表名

@fldName varchar(
255
),
--
字段名

@PageSize
int
=
10
,
--
页尺寸

@PageIndex
int
=
1
,
--
页码

@OrderType bit
=
0
,
--
设置排序类型, 非0 值则降序

@IsCount bit
=
0
,
--
返回记录总数, 非0 值则返回

@strWhere varchar(
2000
)
=
''
--
查询条件(注意: 不要加where)


AS


declare @strsql varchar(
6000
)
--
主语句

declare @strTmp varchar(
1000
)
--
临时变量

declare @strOrder varchar(
500
)
--
排序类型


if
@OrderType
!=
0

begin

set
@strTmp
=
'
<(select min
'

set
@strOrder
=
'
order by [
'
+
@fldName
+
'
] desc
'

end

else

begin

set
@strTmp
=
'
>(select max
'

set
@strOrder
=
'
order by [
'
+
@fldName
+
'
] asc
'

end


set
@strsql
=
'
select top
'
+
str(@PageSize)
+
'
* from [
'

+
@tblName
+
'
] where [
'
+
@fldName
+
'
]
'
+
@strTmp
+
'
([
'

+
@fldName
+
'
]) from (select top
'
+
str((@PageIndex
-
1
)
*
@PageSize)
+
'
[
'

+
@fldName
+
'
] from [
'
+
@tblName
+
'
]
'
+
@strOrder
+
'
) as tblTmp)
'

+
@strOrder


if
@strWhere
!=
''

set
@strsql
=
'
select top
'
+
str(@PageSize)
+
'
* from [
'

+
@tblName
+
'
] where [
'
+
@fldName
+
'
]
'
+
@strTmp
+
'
([
'

+
@fldName
+
'
]) from (select top
'
+
str((@PageIndex
-
1
)
*
@PageSize)
+
'
[
'

+
@fldName
+
'
] from [
'
+
@tblName
+
'
] where
'
+
@strWhere
+
'
'

+
@strOrder
+
'
) as tblTmp) and
'
+
@strWhere
+
'
'
+
@strOrder


if
@PageIndex
=
1

begin

set
@strTmp
=
''

if
@strWhere
!=
''

set
@strTmp
=
'
where (
'
+
@strWhere
+
'
)
'


set
@strsql
=
'
select top
'
+
str(@PageSize)
+
'
* from [
'

+
@tblName
+
'
]
'
+
@strTmp
+
'
'
+
@strOrder

end

if
@IsCount
!=
0

set
@strsql
=
'
select count(
'
+
@fldName
+
'
) as Total from [
'
+
@tblName
+
'
]
'

exec (@strsql)



2
.2分页控件的实现

2.2
.1分页控件的详细代码

using
System;

using
System.Collections.Generic;

using
System.Text;

using
System.ComponentModel;

using
System.Web;

using
System.Web.UI;

using
System.Web.UI.WebControls;


namespace
CustomControls


...
...
{

[ToolBoxData("<{0}:AspNetPager runat='server' PageSize='25' FirstPageText='首页' PrePageText='上一页' NextPageText='下一页' EndPageText='末页' ButtonText='GO'></{0}:AspNetPager>")]

public class AspNetPager : WebControl, INamingContainer


......{


属性块属性块#region 属性块

private object baseState = null;

private object buttonStyleState = null;

private object textBoxStyleState = null;

private object labelStyleState = null;

private object linkButtonStyleState = null;

private LinkButton _lnkbtnFrist;

private LinkButton _lnkbtnPre;

private LinkButton _lnkbtnNext;

private LinkButton _lnkbtnLast;

private Label _lblCurrentPage;

private Label _lblRecodeCount;

private Label _lblPageCount;

private Label _lblPageSize;

private TextBox _txtPageIndex;

private Button _btnChangePage;

private static readonly object EventPageChange = new object();

[Category("Pagination"), Description("每页显示的纪录数"),

DefaultValue("25")]

public virtual int PageSize


......{

get


......{

EnsureChildControls();

return _lblPageSize.Text.Trim() != "" ? int.Parse(_lblPageSize.Text.Trim()) : 25;

}

set


......{

EnsureChildControls();

_lblPageSize.Text = value.ToString();

}

}

[Category("Pagination"), Description("总纪录数"),

DefaultValue("0"), Bindable(true)]

public virtual int RecordCount


......{

get


......{

EnsureChildControls();

return _lblRecodeCount.Text.Trim() != "" ? int.Parse(_lblRecodeCount.Text.Trim()) : 0;

}

set


......{

EnsureChildControls();

if (value > 0)


......{

int recodeCount = value;

_lblPageCount.Text = (value % PageSize == 0 ? value / PageSize : value / PageSize + 1).ToString();//计算总页数

}

_lblRecodeCount.Text = value.ToString();

}

}

[Category("Pagination"), Description("当前页码"),

DefaultValue("1"), Bindable(true)]

public virtual int PageIndex


......{

get


......{

EnsureChildControls();

return _lblCurrentPage.Text.Trim() != "" ? int.Parse(_lblCurrentPage.Text.Trim()) : 1;

}

set


......{

EnsureChildControls();

_lblCurrentPage.Text = value.ToString();

}

}

[Category("Appearance"), Description("设置第一页的文本"),

DefaultValue("首页"), Bindable(true)]

public virtual string FirstPageText


......{

get


......{

EnsureChildControls();

return _lnkbtnFrist.Text.Trim() != "" ? _lnkbtnFrist.Text.Trim() : "首页";

}

set


......{

EnsureChildControls();

_lnkbtnFrist.Text = value;

}

}

[Category("Appearance"), Description("设置上一页的文本"),

DefaultValue("上一页"), Bindable(true)]

public virtual string PrePageText


......{

get


......{

EnsureChildControls();

return _lnkbtnPre.Text.Trim() != "" ? _lnkbtnPre.Text.Trim() : "上一页";

}

set


......{

EnsureChildControls();

_lnkbtnPre.Text = value;

}

}

[Category("Appearance"), Description("设置下一页的文本"),

DefaultValue("下一页"), Bindable(true)]

public virtual string NextPageText


......{

get


......{

EnsureChildControls();

return _lnkbtnNext.Text.Trim() != "" ? _lnkbtnNext.Text.Trim() : "下一页";

}

set


......{

EnsureChildControls();

_lnkbtnNext.Text = value;

}

}

[Category("Appearance"), Description("设置末页的文本"),

DefaultValue("末页"), Bindable(true)]

public virtual string EndPageText


......{

get


......{

EnsureChildControls();

return _lnkbtnLast.Text.Trim() != "" ? _lnkbtnLast.Text.Trim() : "末页";

}

set


......{

EnsureChildControls();

_lnkbtnLast.Text = value;

}

}

[Category("Appearance"), Description("设置跳转按钮的文本"),

DefaultValue(":"), Bindable(true)]

public virtual string ButtonText


......{

get


......{

EnsureChildControls();

return _btnChangePage.Text.Trim() != "" ? _btnChangePage.Text.Trim() : "GO";

}

set


......{

EnsureChildControls();

_btnChangePage.Text = value;

}

}

#endregion



分页事件相关分页事件相关#region 分页事件相关

public event EventHandler PageChanged


......{

add


......@H_502_3083@{

Events.AddHandler(EventPageChange, value);

}

remove


......{

Events.RemoveHandler(EventPageChange, value);

}


}

protected void OnPageChanged(EventArgs e)


......{

EventHandler handler = (EventHandler)Events[EventPageChange];

if (handler != null)


......{

handler(this, e);

}

}

#endregion



样式属性样式属性#region 样式属性

private Style _buttonStyle;

private Style _textBoxStyle;

private Style _linkButtonStyle;

[

Category("Styles"),

DefaultValue(null),

DesignerSerializationVisibility(

DesignerSerializationVisibility.Content),

PersistenceMode(PersistenceMode.InnerProperty),

Description(

"应用于按钮的样式")

]

public virtual Style ButtonStyle


......{

get


......{

if (_buttonStyle == null)


......{

_buttonStyle = new Style();

if (IsTrackingViewState)


......{

((IStateManager)_buttonStyle).TrackViewState();

}

}

return _buttonStyle;

}

}

[

Category("Styles"),

DefaultValue(null),

DesignerSerializationVisibility(

DesignerSerializationVisibility.Content),

PersistenceMode(PersistenceMode.InnerProperty),

Description(

"应用于链接按钮的样式")

]

public virtual Style LinkButtonStyle


......{

get


......{

if (_linkButtonStyle == null)


......{

_linkButtonStyle = new Style();

if (IsTrackingViewState)


......{

((IStateManager)_linkButtonStyle).TrackViewState();

}

}

return _linkButtonStyle;

}

}


[

Category("Styles"),

Description(

"应用于文本框的样式")

]

public virtual Style TextBoxStyle


......{

get


......{

if (_textBoxStyle == null)


......{

_textBoxStyle = new Style();

if (IsTrackingViewState)


......{

((IStateManager)_textBoxStyle).TrackViewState();

}

}

return _textBoxStyle;

}

}

private Style _labelStyle;

[

Category("Styles"),

Description(

"应用于标签的样式")

]

public virtual Style LabelStyle


......{

get


......{

if (_labelStyle == null)


......{

_labelStyle = new Style();

if (IsTrackingViewState)


......{

((IStateManager)_labelStyle).TrackViewState();

}

}

return _labelStyle;

}

}

#endregion



自定义视图状态自定义视图状态#region 自定义视图状态

protected override void LoadViewState(object savedState)


......{

if (savedState == null)


......{

base.LoadViewState(null);

return;

}

else


......{

Triplet t = savedState as Triplet;


if (t != null)


......{

base.LoadViewState(baseState);


if ((t.Second) != null)


......{

((IStateManager)ButtonStyle).LoadViewState(buttonStyleState);

}


if ((t.Third) != null)


......{

((IStateManager)TextBoxStyle).LoadViewState(textBoxStyleState);

}

if (labelStyleState != null)


......{

((IStateManager)(_labelStyle)).LoadViewState(labelStyleState);

}

if (linkButtonStyleState != null)


......{

((IStateManager)(_linkButtonStyle)).LoadViewState(linkButtonStyleState);

}

}

else


......{

throw new ArgumentException("Invalid view state .");

}

}

}


protected override object SaveViewState()


......{

baseState = base.SaveViewState();

buttonStyleState = null;

textBoxStyleState = null;

labelStyleState = null;

linkButtonStyleState = null;

if (_buttonStyle != null)


......{

buttonStyleState =

((IStateManager)_buttonStyle).SaveViewState();

}


if (_textBoxStyle != null)


......{

textBoxStyleState =

((IStateManager)_textBoxStyle).SaveViewState();

}

if (_labelStyle != null)


......{

labelStyleState = ((IStateManager)_labelStyle).SaveViewState();

}

if (_linkButtonStyle != null)


......{

linkButtonStyleState = ((IStateManager)_linkButtonStyle).SaveViewState();

}

return new Triplet(baseState,

buttonStyleState, textBoxStyleState);


}


protected override void TrackViewState()


......{

base.TrackViewState();

if (_buttonStyle != null)


......{

((IStateManager)_buttonStyle).TrackViewState();

}

if (_textBoxStyle != null)


......{

((IStateManager)_textBoxStyle).TrackViewState();

}

if (_labelStyle != null)


......{

((IStateManager)_labelStyle).TrackViewState();

}

if (_linkButtonStyle != null)


......{

((IStateManager)_linkButtonStyle).TrackViewState();

}

}

#endregion



生成控件生成控件#region 生成控件

protected override void CreateChildControls()


...@H_912_5020@...@H_16_5022@{

this.Controls.Clear();

_btnChangePage = new Button();

_btnChangePage.ID = "btnChangePage";

_btnChangePage.Click += new EventHandler(BtnChangePage_Click);

_lblCurrentPage = new Label();

_lblCurrentPage.ID = "lblCurrentPage";

_lblPageCount = new Label();

_lblPageCount.ID = "lblPageCount";

_lblRecodeCount = new Label();

_lblRecodeCount.ID = "lblRecodeCount";

_lnkbtnFrist = new LinkButton();

_lnkbtnFrist.ID = "lnkbtnFrist";

_lnkbtnFrist.Click += new EventHandler(lnkbtnFrist_Click);

_lnkbtnLast = new LinkButton();

_lnkbtnLast.ID = "lnkbtnLast";

_lnkbtnLast.Click += new EventHandler(lnkbtnLast_Click);

_lnkbtnNext = new LinkButton();

_lnkbtnNext.ID = "lnkbtnNext";

_lnkbtnNext.Click += new EventHandler(lnkbtnNext_Click);

_lnkbtnPre = new LinkButton();

_lnkbtnPre.ID = "lnkbtnPre";

_lnkbtnPre.Click += new EventHandler(lnkbtnPre_Click);

_txtPageIndex = new TextBox();

_txtPageIndex.ID = "txtPageIndex";

_lblPageSize = new Label();

_lblPageSize.ID = "lblPageSize";

this.Controls.Add(_btnChangePage);

this.Controls.Add(_lblCurrentPage);

this.Controls.Add(_lblPageCount);

this.Controls.Add(_lblRecodeCount);

this.Controls.Add(_lnkbtnFrist);

this.Controls.Add(_lnkbtnLast);

this.Controls.Add(_lnkbtnNext);

this.Controls.Add(_lnkbtnPre);

this.Controls.Add(_txtPageIndex);

base.CreateChildControls();

}

#endregion



按钮点击事件按钮点击事件#region 按钮点击事件


翻页相关的事件翻页相关的事件#region 翻页相关的事件


/**//**//**//// <summary>

/// 处理翻页事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

protected void lnkbtnFrist_Click(object sender, EventArgs e) //第一页


......{

_lblCurrentPage.Text = "1";

OnPageChanged(EventArgs.Empty);

}

protected void lnkbtnPre_Click(object sender, EventArgs e) //上一页


......{

int pageIndex = int.Parse(_lblCurrentPage.Text);

if (pageIndex > 0)


......{

pageIndex--;

_lblCurrentPage.Text = pageIndex.ToString();

OnPageChanged(EventArgs.Empty);

}

}

protected void lnkbtnNext_Click(object sender, EventArgs e)//下一页


......{

int pageIndex = int.Parse(_lblCurrentPage.Text);

int pageCount = int.Parse(_lblPageCount.Text);

if (pageIndex < pageCount)


......{

pageIndex++;

_lblCurrentPage.Text = pageIndex.ToString();

}

OnPageChanged(EventArgs.Empty);

}

protected void lnkbtnLast_Click(object sender, EventArgs e)//末页


......{

_lblCurrentPage.Text = _lblPageCount.Text;

OnPageChanged(EventArgs.Empty);

}

#endregion

protected void BtnChangePage_Click(object sender, EventArgs e)//跳转到指定页


......{

int pageIndex=0;

try


......{

pageIndex = int.Parse(_txtPageIndex.Text);

}

catch


......{

System.Web.HttpContext.Current.Response.Write("<Script>alert('请输入正确的页数!');</script>");

return;

}

int pageCount = int.Parse(_lblPageCount.Text);

if (pageIndex == 0)//如果为0,则提示错误


......{

System.Web.HttpContext.Current.Response.Write("<Script>alert('请输入正确的页数!');</script>");

return;

}

if (pageIndex > pageCount)//如果大于总页数则提示错误


......{

System.Web.HttpContext.Current.Response.Write("<Script>alert('请输入正确的页数!');</script>");

return;

}

_lblCurrentPage.Text = pageIndex.ToString();

OnPageChanged(EventArgs.Empty);

}

#endregion



重写TagKey重写TagKey#region 重写TagKey

protected override HtmlTextWriterTag TagKey


......{

get


......{

return HtmlTextWriterTag.Table;

}

}

#endregion



绘制控件绘制控件#region 绘制控件

protected override void RenderContents(HtmlTextWriter writer)


......{

if (ButtonStyle != null)


......{

_btnChangePage.ApplyStyle(ButtonStyle);

}

if (TextBoxStyle != null)


......{

_txtPageIndex.ApplyStyle(TextBoxStyle);

}

if (LabelStyle != null)


......{

_lblCurrentPage.ApplyStyle(LabelStyle);

_lblPageCount.ApplyStyle(LabelStyle);

_lblRecodeCount.ApplyStyle(LabelStyle);

_lblPageSize.ApplyStyle(LabelStyle);

}

AddAttributesToRender(writer);

writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.AddAttribute(HtmlTextWriterattribute.Align, "right");

writer.RenderBeginTag(HtmlTextWriterTag.Td);

writer.Write("当前第");

if (_lblCurrentPage != null)

_lblCurrentPage.RenderControl(writer);

writer.Write("页,每页");

if (_lblPageSize != null)


......{

_lblPageSize.RenderControl(writer);

}

writer.Write("条纪录,总共");

if (_lblRecodeCount != null)

_lblRecodeCount.RenderControl(writer);

writer.Write("条纪录,共");

if (_lblPageCount != null)

_lblPageCount.RenderControl(writer);

writer.Write("页 [ ");

if (_lnkbtnFrist != null)


......{

if (PageIndex == 1) //如果是第一页,则第一页灰显,作用是避免不必要的点击造成没必要的数据传输


......{

_lnkbtnFrist.Enabled = false;

}

else


......{

_lnkbtnFrist.Enabled = true;

}

_lnkbtnFrist.RenderControl(writer);

}

writer.Write(" ");

if (_lnkbtnPre != null)


......{

if (PageIndex > 1) //如果当前页大于1,则上一页显示,否则灰显


......{

_lnkbtnPre.Enabled = true;

}

else


......{

_lnkbtnPre.Enabled = false;

}

_lnkbtnPre.RenderControl(writer);

}

writer.Write(" ");

if (_lnkbtnNext != null)


......{

if (_lblPageCount == null)


......{

_lnkbtnNext.Enabled = false;

}

else


......{

int pageCount = int.Parse(_lblPageCount.Text); //获取总页数

if (PageIndex < pageCount)//如果当前页小于总页数,则下一页显示,否则灰显


......{

_lnkbtnNext.Enabled = true;

}

else


......{

_lnkbtnNext.Enabled = false;

}

}

_lnkbtnNext.RenderControl(writer);

}

writer.Write(" ");

if (_lnkbtnLast != null)


......{

if (_lblPageCount == null)


......{

_lnkbtnLast.Enabled = false;

}

else


......{

int pageCount = int.Parse(_lblPageCount.Text); //获取总页数

if (PageIndex == pageCount)//如果当前页为最后一页,则末页灰显


......{

_lnkbtnLast.Enabled = false;

}

else


......{

_lnkbtnLast.Enabled = true;

}

}

_lnkbtnLast.RenderControl(writer);

}

writer.Write(" ]跳转到第");

if (_txtPageIndex != null)

_txtPageIndex.RenderControl(writer);

writer.Write("页");

if (_btnChangePage != null)

_btnChangePage.RenderControl(writer);

writer.RenderEndTag();

writer.RenderEndTag();

//base.RenderContents(writer);

}

#endregion

}

}


2
.3千万级数据分页实现

2.3
.1简介

这次分页我是用Gridview来实现的,测试时间没算,但基本上从10000011纪录中一次查询25条纪录,在10万页以内,时间花费 在1秒以内。使用其他控件比如DataGrid,DataList或者DataReapter应该花费的时间更短。


2.3
.2适用对象

服务器端控件Gridview,DataGrid,DataList,DataReapter等数据绑定控件


2.3
.3分页实现

分页效果图如下:





前台代码如下:


后台代码如下:


<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Demo.aspx.cs
"
Inherits
=
"
Demo
"
%>


<%
@ Register Assembly
=
"
CustomControls
"
Namespace
=
"
CustomControls
"
TagPrefix
=
"
cc2
"
%>


<%
@ Register Assembly
=
"
MyLabel
"
Namespace
=
"
MyLabel
"
TagPrefix
=
"
cc1
"
%>





<!
DOCTYPE html PUBLIC
"
-//W3C//DTD XHTML 1.0 Transitional//EN
"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"
>


<
html xmlns
=
"
http://www.w3.org/1999/xhtml
"
>

<
head runat
=
"
server
"
>

<
title
>
无标题页
</
title
>

<
link type
=
"
text/css
"
rel
=
"
stylesheet
"
href
=
"
css/comm.css
"
/>

</
head
>

<
body
>

<
form id
=
"
form1
"
runat
=
"
server
"
>

<
div
>

&
nbsp;
&
nbsp;

<
asp:GridView ID
=
"
GridView1
"
runat
=
"
server
"
AllowPaging
=
"
false
"
AutoGenerateColumns
=
"
False
"
CellPadding
=
"
4
"
ForeColor
=
"
#333333
"
GridLines
=
"
None
"
PagerSettings
-
Visible
=
"
false
"

Width
=
"
50%
"
height
=
"
35
"
OnRowCommand
=
"
GridView1_RowCommand
"
DataKeyNames
=
"
I_BriefnessID
"
>

<
FooterStyle BackColor
=
"
#507CD1
"
Font
-
Bold
=
"
True
"
ForeColor
=
"
White
"
/>

<
RowStyle BackColor
=
"
#EFF3FB
"
/>

<
EditRowStyle BackColor
=
"
#2461BF
"
/>

<
SelectedRowStyle BackColor
=
"
#D1DDF1
"
Font
-
Bold
=
"
True
"
ForeColor
=
"
#333333
"
/>

<
PagerStyle ForeColor
=
"
White
"
VerticalAlign
=
"
Top
"
BackColor
=
"
Transparent
"
/>

<
HeaderStyle BackColor
=
"
#507CD1
"
Font
-
Bold
=
"
True
"
ForeColor
=
"
White
"
/>

<
AlternatingRowStyle BackColor
=
"
White
"
/>

<
Columns
>

<
asp:TemplateField HeaderText
=
"
序号
"
>

<
ItemTemplate
>

<%
# Container.DataItemIndex
+
1
%>

</
ItemTemplate
>

</
asp:TemplateField
>

<
asp:BoundField datafield
=
"
I_BriefnessID
"
HeaderText
=
"
ID
"
/>

<
asp:BoundField datafield
=
"
I_KMID
"
HeaderText
=
"
科目
"
/>

<
asp:BoundField datafield
=
"
C_Recno
"
HeaderText
=
"
试题号
"
/>

<
asp:BoundField datafield
=
"
M_Title
"
HeaderText
=
"
题面
"
/>

<
asp:BoundField datafield
=
"
C_Answer
"
HeaderText
=
"
答案
"
/>

<
asp:TemplateField HeaderText
=
"
删除
"
>

<
ItemTemplate
>

<
asp:LinkButton ID
=
"
LinkButton1
"
OnClientClick
=
"
return confirm('确定要删除?');
"
runat
=
"
server
"

CausesValidation
=
"
False
"
CommandName
=
"
DeleteData
"
CommandArgument
=
'
<%#DataBinder.Eval(Container.DataItem,"I_BriefnessID").ToString()%>
'
Text
=
"
删除
"
></
asp:LinkButton
>

</
ItemTemplate
>

</
asp:TemplateField
>

</
Columns
>

</
asp:GridView
>

</
div
>

<
div
>

<
cc2:AspNetPager ID
=
"
AspNetPager1
"
runat
=
"
server
"
ButtonText
=
"
GO
"
EndPageText
=
"
末页
"

FirstPageText
=
"
首页
"
NextPageText
=
"
下一页
"
PageSize
=
"
15
"
PrePageText
=
"
上一页
"
OnPageChanged
=
"
Page_Changed
"
Width
=
"
50%
"
>

<
ButtonStyle CssClass
=
"
btn1_mouSEOut
"
Width
=
"
30px
"
/>

<
TextBoxStyle Width
=
"
30px
"
CssClass
=
"
blue_rounded
"
/>

<
LabelStyle ForeColor
=
"
red
"
Font
-
Bold
=
"
true
"
/>

</
cc2:AspNetPager
>

&
nbsp;
&
nbsp;

</
div
>

</
form
>

</
body
>

</
html
>






using
System;

using
System.Data;

using
System.Configuration;

using
System.Collections;

using
System.Web;

using
System.Web.Security;

using
System.Web.UI;

using
System.Web.UI.WebControls;

using
System.Web.UI.WebControls.WebParts;

using
System.Web.UI.HtmlControls;


public
partial
class
Demo : System.Web.UI.Page


...
...
{

protected void Page_Load(object sender, EventArgs e)


......{

if (!Page.IsPostBack)


......{

TestDataCount();

BindPaperDefineProgramme(1);

}


}



绑定试卷定义方案列表绑定试卷定义方案列表#region 绑定试卷定义方案列表


/**//**//**//// <summary>

/// 统计该表的所有纪录

/// </summary>

private void TestDataCount()


......{

DataTable dt = null;

try


......{

//public static DataTable GetTestData(string tableName, int pageSize, int pageIndex,string columnName,bool isCount)

//第一个参数为要查询的表,第二个参数为每页的纪录数,第三个为页码,这里初始化为第1页,第四个参数为表的字段

//,第五个参数为是否返回纪录总数,这里为true表示返回纪录总数

dt = ExecProc.GetTestData("tbl_Briefness", AspNetPager1.PageSize, 1, "I_BriefnessID", true);

}

catch (Exception ex)


......{

Response.Write(ex.Message);

return;

}

if (dt.Rows.Count != 0)


......{

AspNetPager1.RecordCount = int.Parse(dt.Rows[0]["Total"].ToString());

AspNetPager1.PageIndex = 1;//初始化当前页为第一页

}


}

#endregion


protected void Page_Changed(object sender, EventArgs e)


......{

BindPaperDefineProgramme(AspNetPager1.PageIndex);

}



删除纪录删除纪录#region 删除纪录


/**//**//**//// <summary>

/// 删除纪录

/// </summary>

/// <param name="sender"></param>

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)


......{


if (e.CommandName == "Delete")


......{

string pagerID = GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();

int flag = 0;

try


......{

flag = ExecProc.DeleteData(int.Parse(pagerID));

}

catch (Exception ex)


......{

}

if (flag != 0)


......{

Response.Write("<script>alert('删除成功!');</script>");

TestDataCount();

BindPaperDefineProgramme(1);

}

else


......{

Response.Write("<script>alert('删除失败!');</script>");

BindPaperDefineProgramme(AspNetPager1.PageIndex);

}

}

}

#endregion



绑定试卷定义方案列表绑定试卷定义方案列表#region 绑定试卷定义方案列表


/**//**//**//// <summary>

/// 根据当前页码查询需要的数据

/// </summary>

/// <param name="pageIndex">页码</param>

private void BindPaperDefineProgramme(int pageIndex)


......{

DataTable dt = null;

try


......{

dt = ExecProc.GetTestData("tbl_Briefness", pageIndex, false); //根据页码查询需要的纪录

}

catch (Exception ex)


......{

Response.Write(ex.Message);

return;

}

if (dt.Rows.Count == 0)


......{

GridView1.Visible = false;

}

else


......{

GridView1.Visible = true;

GridView1.DataSource = dt;

GridView1.DataBind();

}


}

#endregion

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。