千万级数据分页详细设计

千万级数据分页详细设计
1.1目的
为适应大数据量分页的需要,为以后千万级数据分页提供解决方法或者参考,节省开发时间,特制定本详细设计方案
1.2主要阅读对象
脚本设计人员
1.3参考资料
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
            
{
                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"),
        DefaultValue(
null),
        DesignerSerializationVisibility(
            DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty),
        Description(
            
"应用于文本框的样式")
        ]
        
public virtual Style TextBoxStyle
        
{
            
get
            
{
                
if (_textBoxStyle == null)
                
{
                    _textBoxStyle 
= new Style();
                    
if (IsTrackingViewState)
                    
{
                        ((IStateManager)_textBoxStyle).TrackViewState();
                    }

                }

                
return _textBoxStyle;
            }

        }

        
private Style _labelStyle;
        [
        Category(
"Styles"),
        DefaultValue(
null),
        DesignerSerializationVisibility(
            DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty),
        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()
        
{
            
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 按钮点击事件
        
翻页相关的事件
        
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


        
#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(
"页&nbsp;&nbsp;[&nbsp;&nbsp;");
            
if (_lnkbtnFrist != null)
            
{
                
if (PageIndex == 1//如果是第一页,则第一页灰显,作用是避免不必要的点击造成没必要的数据传输
                {
                    _lnkbtnFrist.Enabled 
= false;
                }

                
else
                
{
                    _lnkbtnFrist.Enabled 
= true;
                }

                _lnkbtnFrist.RenderControl(writer);
            }

            writer.Write(
"&nbsp;");
            
if (_lnkbtnPre != null)
            
{
                
if (PageIndex > 1//如果当前页大于1,则上一页显示,否则灰显
                {
                    _lnkbtnPre.Enabled 
= true;
                }

                
else
                
{
                    _lnkbtnPre.Enabled 
= false;
                }

                _lnkbtnPre.RenderControl(writer);
            }

            writer.Write(
"&nbsp;");
            
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(
"&nbsp;");
            
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(
"&nbsp;&nbsp;]跳转到第");
            
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秒以内。使用其他控件比如DataGridDataList或者DataReapter应该花费的时间更短。

2.3.2 适用对象

服务器端控件GridviewDataGridDataListDataReapter等数据绑定控件

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", AspNetPager1.PageSize, pageIndex, "I_BriefnessID"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

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值