加入两个组件:BindingNavigator和BindingSource

代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.Text;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using DevExpress.XtraEditors;
  12. using DZAMS.DBUtility;
  13.  
  14. namespace DZAMS.Demo
  15. {
  16.  
  17. public partial class GridPage_Frm : DevExpress.XtraEditors.XtraForm
  18. {
  19. public DataTable dt = new DataTable();
  20. StoreProcedure sp;
  21. private int pageSize = 10; //每页显示行数
  22. private int nMax = 0; //总记录数
  23. private int pageCount = 0; //页数=总记录数/每页显示行数
  24. private int pageCurrent = 0; //当前页号
  25. private DataSet ds = new DataSet();
  26. private DataTable dtInfo = new DataTable();
  27. public GridPage_Frm()
  28. {
  29. InitializeComponent();
  30. }
  31.  
  32. private void GridPage_Frm_Load(object sender, EventArgs e)
  33. {
  34. string strQuery = string.Format("SELECT Id, UserCode, UserName, RoleName, Ip, Mac, LoginTime FROM DZ_LoginLog");
  35. dt = SqlHelper.ExecuteDataset(SqlHelper.conn, CommandType.Text, strQuery.ToString()).Tables[0];
  36.  
  37. gridControl1.DataSource = dt;
  38.  
  39. string strConn = "SERVER=(local);DATABASE=DZ;UID=sa;PWD=XXXX"; //数据库连接字符串
  40. SqlConnection conn = new SqlConnection(strConn);
  41. conn.Open();
  42. string strSql = "SELECT count(*) as num FROM DZ_LoginLog";
  43. SqlDataAdapter sda = new SqlDataAdapter(strSql, conn);
  44. sda.Fill(ds, "ds");
  45. conn.Close();
  46.  
  47. nMax = Convert.ToInt32(ds.Tables[0].Rows[0]["num"].ToString());
  48. lblTotalCount.Text = nMax.ToString();
  49. lblPageSize.Text = pageSize.ToString();
  50.  
  51. sp = new StoreProcedure("Pr_Monitor_Pagination", strConn);
  52. dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent++, pageSize);
  53. InitDataSet();
  54.  
  55. }
  56. private void InitDataSet()
  57. {
  58. pageCount = (nMax / pageSize); //计算出总页数
  59.  
  60. if ((nMax % pageSize) > 0) pageCount++;
  61.  
  62. pageCurrent = 1; //当前页数从1開始
  63.  
  64. LoadData();
  65. }
  66.  
  67. private void LoadData()
  68. {
  69. lblPageCount.Text = "/"+pageCount.ToString();
  70. txtCurrentPage.Text = Convert.ToString(pageCurrent);
  71.  
  72. this.bdsInfo.DataSource = dtInfo;
  73. this.bdnInfo.BindingSource = bdsInfo;
  74. this.gridControl1.DataSource = bdsInfo;
  75. }
  76.  
  77. private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  78. {
  79. if (e.ClickedItem.Text == "导出当前页")
  80. {
  81. SaveFileDialog saveFileDialog = new SaveFileDialog();
  82. saveFileDialog.Title = "导出Excel";
  83. saveFileDialog.Filter = "Excel文件(*.xls)|*.xls";
  84. DialogResult dialogResult = saveFileDialog.ShowDialog(this);
  85. if (dialogResult == DialogResult.OK)
  86. {
  87. DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions();
  88. gridControl1.ExportToXls(saveFileDialog.FileName, options);
  89. // gridControl1.ExportToExcelOld(saveFileDialog.FileName);
  90. DevExpress.XtraEditors.XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  91. }
  92. }
  93. if (e.ClickedItem.Text == "关闭")
  94. {
  95. this.Close();
  96. }
  97. if (e.ClickedItem.Text == "首页")
  98. {
  99. pageCurrent--;
  100. if (pageCurrent <= 0)
  101. {
  102. MessageBox.Show("已经是首页。请点击“下一页”查看!");
  103. return;
  104. }
  105. else
  106. {
  107. pageCurrent = 1;
  108. dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent, pageSize);
  109. }
  110. }
  111. if (e.ClickedItem.Text == "上一页")
  112. {
  113. pageCurrent--;
  114. if (pageCurrent <= 0)
  115. {
  116. MessageBox.Show("已经是第一页,请点击“下一页”查看!");
  117. return;
  118. }
  119. else
  120. {
  121. dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent, pageSize);
  122. }
  123. }
  124. if (e.ClickedItem.Text == "下一页")
  125. {
  126. pageCurrent++;
  127. if (pageCurrent > pageCount)
  128. {
  129. MessageBox.Show("已经是最后一页。请点击“上一页”查看。");
  130. return;
  131. }
  132. else
  133. {
  134. dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent, pageSize);
  135. }
  136. }
  137. if (e.ClickedItem.Text == "尾页")
  138. {
  139. pageCurrent++;
  140. if (pageCurrent > pageCount)
  141. {
  142. MessageBox.Show("已经是尾页,请点击“上一页”查看。");
  143. return;
  144. }
  145. else
  146. {
  147. pageCurrent = pageCount;
  148. dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCount, pageSize);
  149. }
  150. }
  151. LoadData();
  152. }
  153.  
  154. }
  155. }

StoreProcedure类:

  1. public class StoreProcedure
  2. {
  3. // 存储过程名称。
  4. private string _name;
  5. // 数据库连接字符串。
  6.  
  7. private string _conStr;
  8. // 构造函数
  9. // sprocName: 存储过程名称;
  10. // conStr: 数据库连接字符串。
  11.  
  12. public StoreProcedure(string sprocName, string conStr)
  13. {
  14. _conStr = conStr;
  15. _name = sprocName;
  16. }
  17. // 运行存储过程,不返回值。
  18. // paraValues: 參数值列表。
  19. // return: void
  20. public void ExecuteNoQuery(params object[] paraValues)
  21. {
  22. using (SqlConnection con = new SqlConnection(_conStr))
  23. {
  24. SqlCommand comm = new SqlCommand(_name, con);
  25. comm.CommandType = CommandType.StoredProcedure;
  26. AddInParaValues(comm, paraValues);
  27. con.Open();
  28. comm.ExecuteNonQuery();
  29. con.Close();
  30. }
  31. }
  32.  
  33. // 运行存储过程返回一个表。
  34. // paraValues: 參数值列表。
  35. // return: DataTable
  36. public DataTable ExecuteDataTable(params object[] paraValues)
  37. {
  38. SqlCommand comm = new SqlCommand(_name, new SqlConnection(_conStr));
  39. comm.CommandType = CommandType.StoredProcedure;
  40. AddInParaValues(comm, paraValues);
  41. SqlDataAdapter sda = new SqlDataAdapter(comm);
  42. DataTable dt = new DataTable();
  43. sda.Fill(dt);
  44. return dt;
  45. }
  46.  
  47. // 运行存储过程。返回SqlDataReader对象。
  48. // 在SqlDataReader对象关闭的同一时候。数据库连接自己主动关闭。
  49.  
  50. // paraValues: 要传递给给存储过程的參数值类表。
  51. // return: SqlDataReader
  52. public SqlDataReader ExecuteDataReader(params object[] paraValues)
  53. {
  54. SqlConnection con = new SqlConnection(_conStr);
  55. SqlCommand comm = new SqlCommand(_name, con);
  56. comm.CommandType = CommandType.StoredProcedure;
  57. AddInParaValues(comm, paraValues);
  58. con.Open();
  59. return comm.ExecuteReader(CommandBehavior.CloseConnection);
  60. }
  61. // 获取存储过程的參数列表。
  62. private ArrayList GetParas()
  63. {
  64. SqlCommand comm = new SqlCommand("dbo.sp_sproc_columns_90",
  65. new SqlConnection(_conStr));
  66. comm.CommandType = CommandType.StoredProcedure;
  67. comm.Parameters.AddWithValue("@procedure_name", (object)_name);
  68. SqlDataAdapter sda = new SqlDataAdapter(comm);
  69. DataTable dt = new DataTable();
  70. sda.Fill(dt);
  71. ArrayList al = new ArrayList();
  72. for (int i = 0; i < dt.Rows.Count; i++)
  73. {
  74. al.Add(dt.Rows[i][3].ToString());
  75. }
  76. return al;
  77. }
  78. // 为 SqlCommand 加入參数及赋值。
  79. private void AddInParaValues(SqlCommand comm, params object[] paraValues)
  80. {
  81. comm.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int));
  82. comm.Parameters["@RETURN_VALUE"].Direction =
  83. ParameterDirection.ReturnValue;
  84. if (paraValues != null)
  85. {
  86. ArrayList al = GetParas();
  87. for (int i = 0; i < paraValues.Length; i++)
  88. {
  89. comm.Parameters.AddWithValue(al[i + 1].ToString(),
  90. paraValues[i]);
  91. }
  92. }
  93. }
  94. }

存储过程:

  1. ALTER procedure [dbo].[Pr_Monitor_Pagination]
  2. -- ============================================= == Paging == =============================================
  3. --Author: Lee
  4. --Create date: 2010\06\11
  5. --Parameter:
  6. -- 1.Tables :The Name Of Table or view
  7. -- 2.PrimaryKey :Primary Key
  8. -- 3.Sort :Ordering StatementWithout Order By, For ExampleNewsID Desc,OrderRows Asc
  9. -- 4.CurrentPage :The Page Number Of Current page
  10. -- 5.PageSize :The Size Of One Page's Group
  11. -- 6.Fields :The Field Of You Needed
  12. -- 7.Filter :Where Condition,Without Where
  13. -- 8.Group :Group Condition。Without Group By
  14. -- 9.GetCount :Return The Number Of All, Not Zero
  15. --Updates:
  16. -- 2010\06\09 Create Procedure.
  17. -- ========================================================================================================
  18. @Tables varchar(600),
  19. @PrimaryKey varchar(100),
  20. @Sort varchar(200)=null,
  21. @CurrentPage bigint=1,
  22. @PageSize bigint=10,
  23. @Fields varchar(1000)='*',
  24. @Filter varchar(1000)=null,
  25. @Group varchar(1000)=null,
  26. @GetCount bit=0
  27. as
  28. if(@GetCount=0)
  29. begin
  30. /*Ordering Of Default */
  31. if @Sort is null or @Sort=''
  32. set @Sort=@PrimaryKey
  33. declare @SortTable varchar(100)
  34. declare @SortName varchar(100)
  35. declare @strSortColumn varchar(200)
  36. declare @operator char(2)
  37. declare @type varchar(100)
  38. declare @prec int
  39. /*Setting Condition Of Ordering*/
  40. if charindex('desc',@Sort)>0
  41. begin
  42. set @strSortColumn=replace(@Sort,'desc','')
  43. set @operator='<='
  44. end
  45. else
  46. begin
  47. if charindex('asc',@Sort)=0
  48. set @strSortColumn=replace(@Sort,'asc','')
  49. set @operator='>='
  50. end
  51. if charindex('.',@strSortColumn)>0
  52. begin
  53. set @SortTable=substring(@strSortColumn,0,charindex('.',@strSortColumn))
  54. set @SortName=substring(@strSortColumn,charindex('.',@strSortColumn)+1,len(@strSortColumn))
  55. end
  56. else
  57. begin
  58. set @SortTable=@Tables
  59. set @SortName=@strSortColumn
  60. end
  61. select @type=t.name,@prec=c.prec from sysobjects o join syscolumns c on o.id=c.id join systypes t on c.xusertype=t.xusertype where o.name=@SortTable and c.name=@SortName
  62. if charindex('char',@type)>0
  63. set @type=@type+'('+cast(@prec as varchar)+')'
  64. declare @strPageSize varchar(50)
  65. declare @strStartRow varchar(50)
  66. declare @strFilter varchar(1000)
  67. declare @strSimpleFilter varchar(1000)
  68. declare @strGroup varchar(1000)
  69. /*CurrentPage Of Default*/
  70. if @CurrentPage<1
  71. set @CurrentPage=1
  72. /*Setting Paging param*/
  73. set @strPageSize=cast(@PageSize as varchar(50))
  74. set @strStartRow=cast(((@CurrentPage-1)*@PageSize+1) as varchar(50))
  75. /*Condition Of Filter And Group*/
  76. if @Filter is not null and @Filter!=''
  77. begin
  78. set @strFilter=' where '+@Filter+' '
  79. set @strSimpleFilter=' and '+@Filter +' '
  80. end
  81. else
  82. begin
  83. set @strSimpleFilter=''
  84. set @strFilter=''
  85. end
  86. if @Group is not null and @Group!=''
  87. set @strGroup=' group by '+@Group+' '
  88. else
  89. set @strGroup=''
  90. exec(' declare @SortColumn '+ @type + ' set RowCount ' + @strStartRow+ ' select @SortColumn=' + @strSortColumn + ' from ' + @Tables+ @strFilter + ' ' + @strGroup + ' Order by ' + @Sort+ ' set rowcount ' + @strPageSize + ' select ' + @Fields + ' from ' + @Tables + ' where ' + @strSortColumn + @operator+ '@SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' Order by ' + @Sort + ' ')
  91. end
  92. else
  93. begin
  94. declare @strSQL varchar(5000)
  95. if @Filter !=''
  96. set @strSQL = 'select count(' + @PrimaryKey + ') as Total from [' + @Tables + '] where ' + @Filter
  97. else
  98. set @strSQL = 'select count(' + @PrimaryKey + ') as Total from [' + @Tables + ']'
  99. exec(@strSQL)
  100. end

效果:

[DevExpress]GridControl分页的实现的更多相关文章

  1. C# devexpress gridcontrol 分页 控件制作

    这个小小的功能实现起来还是有一点点复杂, 分页单独一个usercontrol 出来,导致查询换页 与gridcontrol页面分离,  一般通过换页事件通知girdcontrol 做出查询 查询来说有 ...

  2. DevExpress GridControl+UserControl实现分页

    志向不过是记忆的奴隶,生气勃勃地降生,但却很难成长. —— 莎士比亚 时隔一年,我写随笔真的很随意,想起了就来博客园写写,想不起来就任由懒惰支配着我.不过我到觉得这不是什么坏事,你不用为了完成某事而让 ...

  3. DevExpress GridControl使用(转)

    DevExpress GridControl使用 (一)原汁原味的表格展示 Dev控件中的表格控件GridControl控件非常强大.不过,一些细枝末节的地方有时候用起来不好找挺讨厌的.使用过程中,多 ...

  4. DevExpress GridControl使用方法

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...

  5. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据

    1. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为Click 2. 实现De ...

  6. DevExpress GridControl 使用方法技巧 总结 收录整理

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 ().gridView.AddNe ...

  7. Devexpress GridControl z

    http://minmin86121.blog.163.com/blog/static/4968115720144194923578/ 1 AllowNullInput=False; --Devexp ...

  8. DevExpress GridControl 单元格添加进度条(ProgressBar)

    首先可以使用DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所以的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...

  9. DevExpress GridControl 显示外部图片

    如果数据源中只包含图片的链接,如何在DevExpress GridControl的一列中显示外部图片? 要实现该功能,可通过非绑定列的方式来实现.具体实现方法如下: 1.    创建了一个非绑定列并设 ...

随机推荐

  1. genymotion 双击打开后 图标只显示在任务栏 无法在电脑上显示

    解决办法 删除 c:/users/user/AppData/local/Genymobile  例如:C:\Users\lenovo\AppData\Local\Genymobile 删除注册表:HK ...

  2. 去掉PhpStorm打开自动启动的项目

    有时候启动的项目很大,导致很卡,而且在编辑器中更改也没效果,简单暴力的办法 找到项目的目录,删除其中的.idea文件夹

  3. js 页面图片等元素在普通元素中滚动动态加载技术

    /*! * 2012-01-13 v1.1 偏移值计算修改 position → offset * 2012-09-25 v1.2 增加滚动容器参数, 回调参数 * 2015-11-17 v1.3 只 ...

  4. 用js 转化大小写

    function capitalize(string){ var words =string.split(" "); for(var i=0;i<words.length;i ...

  5. Maven 的相关配置

    第一步: 官方下载路径: http://maven.apache.org/download.cgi maven官方网站:http://www.mvnrepository.com/ 第二步: 请下载这个 ...

  6. 装饰器(python)

    一,装饰器定义:本质就是函数,功能是为其他函数添加新功能原则:1.不修改被装饰函数的源代码(开放封闭原则)2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式3.装饰器=高阶函数+函数嵌套+闭包高 ...

  7. 【Html,Css,JavaScript】初学总结

    网页制作 HTML 一.通用模板: <!DOCTYPE html> <html lang=”en”> <head> <meta  charset=”UTF-8 ...

  8. PHP程序员必须知道的两种日志

    前言 作为一名程序员,比码代码还重要那么一点点的东西就是日志的分析和查询.下面列出常见日志及设置方法. php-fpm 慢日志 php慢日志需要在php-fpm.conf设置,如果使用源码包安装默认请 ...

  9. Python之文件处理-递归删除特定文件

    Python之文件处理-递归删除特定文件 #!/usr/bin/env python # -*- coding:utf-8 -*- import os def delete_particular_fi ...

  10. selenium的三种等待

    1. 强制等待 最简单粗暴,sleep(xx),不管你浏览器是否加载完了,程序都得等待xx秒,时间一到,再继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式, ...