DevExpress中如何实现GridControl的分页功能

简介:DevExpress中如何实现GridControl的分页功能,

主要是利用DataNavigator和GridControl组合,自定义事件实现分页功能

接下来,我们就去实现分页功能,先看下效果图:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

整个分页操作,基本分三步:

一:界面层

二:代码层

三:数据库

四:调用

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一:界面层,如图:

说明:放入一个GridControl控件(gridLogList)和DataNavigator控件(nvgtDataPager),给GridControl绑定好列,

设置DataNavigator控件属性Dock=Bottom;TextLocation=Center;TextStringFormat=第 {0}页 ,共 {1};

ShowToolTips=true;

在DataNavigator控件属性Buttons --> CustomButtons  (集合)  在右侧点击按钮,打开自定义按钮对话框,如下图:

点击Add按钮,添加4个自定义按钮,分别为每一个按钮设置:

ImageIndex属性:设置显示的样式,自己根据功能设按钮样式

Tag属性:用于判断点击的按钮,四个按钮分别设置:首页:f;上一页:p;下一页:n;最后一页:l

将下图中圈中的按钮属性visible=False;  如图:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最主要的设置DataNavigator控件的ButtonClick事件,下面是我自己在项目中用到的,作为参考,

        private void dataNavigator1_ButtonClick(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
{
PageInfo pageInfo = dataNavigator1.Tag as PageInfo;
if (pageInfo != null)
{
//首页
if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Custom && e.Button.Tag.ToString() == "f")
{
pageInfo.CurrentPage = ;
} //上一页
if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Custom && e.Button.Tag.ToString() == "p")
{ if (pageInfo.HasPrevious == true)
pageInfo.CurrentPage--;
} //下一页
if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Custom && e.Button.Tag.ToString() == "n")
{
if (pageInfo.HasNext == true)
pageInfo.CurrentPage++; } //最后一页
if ((e.Button).ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Custom && e.Button.Tag.ToString() == "l")
{
pageInfo.CurrentPage = pageInfo.TotalPages;
}
}
QueryCriteria();//按条件执行查询
}

也 可以参考下面的代码

二:代码层

1.定义变量

  1.  
    //页行数
  2.  
    public int pagesize = 20;
  3.  
    //当前页
  4.  
    public int pageIndex = 1;
  5.  
    //总页数
  6.  
    public int pageCount;

2.定义方法

  1.  
    /// <summary>
  2.  
    /// 绑定分页控件和GridControl数据
  3.  
    /// </summary>
  4.  
    /// <author>PengZhen</author>
  5.  
    /// <time>2013-11-5 14:22:22</time>
  6.  
    /// <param name="strWhere">查询条件</param>
  7.  
    public void BindPageGridList(string strWhere)
  8.  
    {
  9.  
    SystemOperateLog objSOL = new BLL.SystemOperateLog();
  10.  
     
  11.  
    nvgtDataPager.Buttons.CustomButtons[0].Enabled = true;
  12.  
    nvgtDataPager.Buttons.CustomButtons[1].Enabled = true;
  13.  
    nvgtDataPager.Buttons.CustomButtons[2].Enabled = true;
  14.  
    nvgtDataPager.Buttons.CustomButtons[3].Enabled = true;
  15.  
    //记录获取开始数
  16.  
    int startIndex = (pageIndex - 1) * pagesize + 1;
  17.  
    //结束数
  18.  
    int endIndex = pageIndex * pagesize;
  19.  
     
  20.  
    //总行数
  21.  
    int row = objSOL.GetRecordCount(strWhere);
  22.  
     
  23.  
    //获取总页数
  24.  
    if (row % pagesize > 0)
  25.  
    {
  26.  
    pageCount = row / pagesize + 1;
  27.  
    }
  28.  
    else
  29.  
    {
  30.  
    pageCount = row / pagesize;
  31.  
    }
  32.  
     
  33.  
    if (pageIndex == 1)
  34.  
    {
  35.  
    nvgtDataPager.Buttons.CustomButtons[0].Enabled = false;
  36.  
    nvgtDataPager.Buttons.CustomButtons[1].Enabled = false; ;
  37.  
    }
  38.  
     
  39.  
    //最后页时获取真实记录数
  40.  
    if (pageCount == pageIndex)
  41.  
    {
  42.  
    endIndex = row;
  43.  
    nvgtDataPager.Buttons.CustomButtons[2].Enabled = false;
  44.  
    nvgtDataPager.Buttons.CustomButtons[3].Enabled = false;
  45.  
    }
  46.  
     
  47.  
    //分页获取数据列表
  48.  
    DataTable dt = objSOL.GetListByPage(strWhere, "", startIndex, endIndex).Tables[0];
  49.  
     
  50.  
    gridLogList.DataSource = dt;
  51.  
     
  52.  
    nvgtDataPager.DataSource = dt;
  53.  
    nvgtDataPager.TextStringFormat = string.Format("第 {0}页, 共 {1}页", pageIndex, pageCount);
  54.  
    }

3.定义事件

  1.  
    /// <summary>
  2.  
    /// 按钮点击事件
  3.  
    /// </summary>
  4.  
    /// <author>PengZhen</author>
  5.  
    /// <time>2013-11-5 14:24:25</time>
  6.  
    /// <param name="sender"></param>
  7.  
    /// <param name="e"></param>
  8.  
    private void nvgtDataPager_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
  9.  
    {
  10.  
    ShowEvent("ButtonClick", e.Button);
  11.  
    }
  12.  
     
  13.  
    /// <summary>
  14.  
    /// 分页事件处理
  15.  
    /// </summary>
  16.  
    /// <param name="eventString">事件名称</param>
  17.  
    /// <param name="button">按钮控件</param>
  18.  
    /// <author>PengZhen</author>
  19.  
    /// <time>2013-11-5 14:25:59</time>
  20.  
    void ShowEvent(string eventString, NavigatorButtonBase button)
  21.  
    {
  22.  
    //string type = button.ButtonType.ToString();
  23.  
    NavigatorCustomButton btn = (NavigatorCustomButton)button;
  24.  
    string type = btn.Tag.ToString();
  25.  
    if (type == "首页")
  26.  
    {
  27.  
    pageIndex = 1;
  28.  
    }
  29.  
     
  30.  
    if (type=="下一页")
  31.  
    {
  32.  
    pageIndex++;
  33.  
    }
  34.  
     
  35.  
    if (type=="末页")
  36.  
    {
  37.  
    pageIndex = pageCount;
  38.  
    }
  39.  
     
  40.  
    if (type == "上一页")
  41.  
    {
  42.  
    pageIndex--;
  43.  
    }
  44.  
     
  45.  
    //绑定分页控件和GridControl数据
  46.  
    BindPageGridList(strWhere);
  47.  
    }

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三:数据库

  1.  
    /// <summary>
  2.  
    /// 获取记录总数
  3.  
    /// </summary>
  4.  
    public int GetRecordCount(string strWhere)
  5.  
    {
  6.  
    StringBuilder strSql = new StringBuilder();
  7.  
    strSql.Append("select count(1) FROM TL_SYSTEM_OPERATE_LOGS ");
  8.  
    if (strWhere.Trim() != "")
  9.  
    {
  10.  
    strSql.Append(" where " + strWhere);
  11.  
    }
  12.  
    object obj = _DbHelperOra.GetSingle(strSql.ToString());
  13.  
    if (obj == null)
  14.  
    {
  15.  
    return 0;
  16.  
    }
  17.  
    else
  18.  
    {
  19.  
    return Convert.ToInt32(obj);
  20.  
    }
  21.  
    }
  22.  
    /// <summary>
  23.  
    /// 分页获取数据列表
  24.  
    /// </summary>
  25.  
    public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
  26.  
    {
  27.  
    StringBuilder strSql = new StringBuilder();
  28.  
    strSql.Append("SELECT * FROM ( ");
  29.  
    strSql.Append(" SELECT ROW_NUMBER() OVER (");
  30.  
    if (!string.IsNullOrEmpty(orderby.Trim()))
  31.  
    {
  32.  
    strSql.Append("order by T." + orderby);
  33.  
    }
  34.  
    else
  35.  
    {
  36.  
    strSql.Append("order by T.ID desc");
  37.  
    }
  38.  
    strSql.Append(")AS Rowssss, T.* from TL_SYSTEM_OPERATE_LOGS T ");
  39.  
    if (!string.IsNullOrEmpty(strWhere.Trim()))
  40.  
    {
  41.  
    strSql.Append(" WHERE " + strWhere);
  42.  
    }
  43.  
    strSql.Append(" ) TT");
  44.  
    strSql.AppendFormat(" WHERE TT.Rowssss between {0} and {1}", startIndex, endIndex);
  45.  
    return _DbHelperOra.Query(strSql.ToString());
  46.  
    }

说明:数据库的操作只作为借鉴,请根据自己的表做相应的修改

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

四:调用

如文章开头第一张效果图所述,当我就行查询操作时,也就是调用分页和绑定数据,需要做的操作,如下:

  1.  
    //查询条件
  2.  
    private static string strWhere = string.Empty;
  3.  
     
  4.  
    /// <summary>
  5.  
    /// 查询
  6.  
    /// </summary>
  7.  
    /// <author>PengZhen</author>
  8.  
    /// <time>2013-10-30 11:08:03</time>
  9.  
    /// <param name="sender"></param>
  10.  
    /// <param name="e"></param>
  11.  
    private void btSelect_Click(object sender, EventArgs e)
  12.  
    {
  13.  
    //获取查询条件
  14.  
    strWhere = GetSqlWhere();
  15.  
     
  16.  
    BindPageGridList(strWhere);
  17.  
    }
  18.  
     
  19.  
    /// <summary>
  20.  
    /// 获取查询条件
  21.  
    /// </summary>
  22.  
    /// <author>PengZhen</author>
  23.  
    /// <time>2013-11-5 15:25:00</time>
  24.  
    /// <returns>返回查询条件</returns>
  25.  
    private string GetSqlWhere()
  26.  
    {
  27.  
    //查询条件
  28.  
    string strReturnWhere = string.Empty;
  29.  
     
  30.  
    //用户编号
  31.  
    string strUserId = string.Empty;
  32.  
     
  33.  
    if (!string.IsNullOrEmpty(UserManage.UserID))
  34.  
    {
  35.  
    strUserId = "12";// UserManage.UserID;
  36.  
    }
  37.  
    //分系统编码
  38.  
    string strSubSystemCode = string.Empty;
  39.  
     
  40.  
    if (cbbSubSystemCode.SelectedItem != null)
  41.  
    {
  42.  
    strSubSystemCode = (cbbSubSystemCode.SelectedItem as ComboBoxData).Value;
  43.  
    }
  44.  
     
  45.  
    //功能模块
  46.  
    string strFunctionModule = string.Empty;
  47.  
     
  48.  
    if (cbbFunctionModule.SelectedItem != null)
  49.  
    {
  50.  
    strFunctionModule = (cbbFunctionModule.SelectedItem as ComboBoxData).Value;
  51.  
    }
  52.  
     
  53.  
    //数据分类
  54.  
    string strDataType = string.Empty;
  55.  
     
  56.  
    if (tcbDataType.SelectedNode != null)
  57.  
    {
  58.  
    strDataType = tcbDataType.SelectedNode.Name;
  59.  
    }
  60.  
     
  61.  
    //操作类型
  62.  
    string strOperatedType = string.Empty;
  63.  
     
  64.  
    if (cbbOperatedType.SelectedItem != null)
  65.  
    {
  66.  
    strOperatedType = (cbbOperatedType.SelectedItem as ComboBoxData).Value;
  67.  
    }
  68.  
    //开始时间
  69.  
    string strStartTime = string.Empty;
  70.  
     
  71.  
    if (!string.IsNullOrEmpty(dateStartTime.Text))
  72.  
    {
  73.  
    strStartTime = dateStartTime.Text;
  74.  
    }
  75.  
    //结束时间
  76.  
    string strEndTime = string.Empty;
  77.  
     
  78.  
    if (!string.IsNullOrEmpty(dateEndTime.Text))
  79.  
    {
  80.  
    strEndTime = dateEndTime.Text;
  81.  
    }
  82.  
     
  83.  
    //用户ID
  84.  
    if (!string.IsNullOrEmpty(strUserId))
  85.  
    {
  86.  
    strReturnWhere += "USER_ID='" + strUserId + "' and";
  87.  
    }
  88.  
    //分系统代码
  89.  
    if (!string.IsNullOrEmpty(strSubSystemCode))
  90.  
    {
  91.  
    strReturnWhere += "SYSTEM_CODE='" + strSubSystemCode + "' and";
  92.  
    }
  93.  
    //模块编号
  94.  
    if (!string.IsNullOrEmpty(strFunctionModule))
  95.  
    {
  96.  
    strReturnWhere += "MODULE_ID='" + strFunctionModule + "' and";
  97.  
    }
  98.  
    //数据分类代码
  99.  
    if (!string.IsNullOrEmpty(strDataType))
  100.  
    {
  101.  
    strReturnWhere += "DATA_CATAGORY_CODE='" + strDataType + "' and";
  102.  
    }
  103.  
    //操作类型
  104.  
    if (!string.IsNullOrEmpty(strOperatedType))
  105.  
    {
  106.  
    strReturnWhere += "OPERATE_TYPE='" + strOperatedType + "' and";
  107.  
    }
  108.  
    //操作时间
  109.  
    if (!string.IsNullOrEmpty(strStartTime) && !string.IsNullOrEmpty(strEndTime))
  110.  
    {
  111.  
    strReturnWhere += "OPERATE_DATE between '" + strStartTime + "' and '" + strEndTime + "'";
  112.  
    }
  113.  
     
  114.  
    if (!string.IsNullOrEmpty(strReturnWhere))
  115.  
    {
  116.  
    strReturnWhere = strReturnWhere.Remove(strReturnWhere.LastIndexOf("and"));
  117.  
    }
  118.  
     
  119.  
    return strReturnWhere;
  120.  
    }

说明:此处只需要指定你自定义的条件就可以了,以上代码展示的只是文章图一的实现

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

好了,到这,我们的所有操作就完成了,来看下我们运行的分页效果图:

DevExpress中如何实现GridControl的分页功能(组件)

出处: https://blog.csdn.net/pengzhen8805/article/details/14169327

DevExpress中实现GridControl的分页功能的更多相关文章

  1. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  2. DevExpress中的gridControl选择问题

    在Dev控件中,gridControl是最常用的一个了. //直接通过gridView获取当前行 dr=this.gridView1.GetDataRow(this.gridView1.Focused ...

  3. Asp.net EasyUI中的combogrid实现分页功能

    在jquery.easyUI.js 要实现分页,必须在后台接收参数时声明两个变量:page(当前第几页),rows(每页显示多少条信息),否者easyUI前台传递不了分页参数. 这两个属性的名称在ea ...

  4. DevExpress中的GridControl控件设置了列Readonly后,想双击弹出明细的实现

    OptionsBehavior.Editable = true时,会有二个对象触发事件:view触发ShownEditor 事件(第一单击时)和内置编辑器的DoubleClick事件所以必须处理这二个 ...

  5. DevExpress中获取GridControl排序之后的List

    public System.Collections.IList GetGridViewFilteredAndSortedData(DevExpress.XtraGrid.Views.Grid.Grid ...

  6. MySql中查询语句实现分页功能

    import java.util.*;import java.sql.*; public class FruitDao {    private Connection conn;    private ...

  7. devexpress中gridcontrol头部添加垂直线(右边框)

    winform开发,用devexpress中的gridcontrol控件,头部默认是3D样式,当客户希望像内容一样扁平化显示且需要添加垂直线(右边框)时恶梦开始了..经过一阵摸索发现可以这样解决: 1 ...

  8. devexpress中gridview控件编辑时改变输入法状态

    在win7环境下使用Devexpress中的SpinEdit控件,切换成中文[简/繁]输入法输入数字键时有不少输入法会重复产生数字如输入1会变成11,输入123会变成112233.使用SpinEdit ...

  9. sf中标准的分页功能介绍

    世上本无事,庸人自扰之.我喜欢一个相对比较安静的环境去学习和工作,希望在一个掉一根针的声音都能够听到的环境中,但是有时候往往相反,一片嘈杂,我改变不了周围的环境,只能改变自己,其实这些都没有什么,也许 ...

随机推荐

  1. Python微服务实践-集成Consul配置中心

    A litmus test for whether an app has all config correctly factored out of the code is whether the co ...

  2. LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))

    8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...

  3. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...

  4. react-native样式里面的一些坑

    在我们做react-native项目时,引入css样式之后 控制台报下面的这样的错 解决问题的方法是: 报错的代码 改后的代码

  5. AX导出excel设置格式

    今天在AX2009里面写一个导出EXCEL,没有模版,这是第一次碰到,之后写完之后发现导出的数据格式不对. 到处取经之后得到一下结果: 定义一个 Com   range; SysExcelCells  ...

  6. AS3放大镜工具类

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Display ...

  7. 树莓派Raspbian系统格式化挂载硬盘

    1.查看树莓派系统挂载的储存设备 使用工具查看系统识别到的硬盘设备,命令: fdisk -l /dev/sda 和 /dev/sdb  分别是两块硬盘. 2.修改硬盘分区 Linux和windows一 ...

  8. Arduino 计算机视觉系统概述

    计算机视觉系统概述 计算机视觉系统是最近比较热门的研究领域,今天开始给大家介绍下计算机视觉相关的知识. 视觉是人的所有感官中最敏感的一种,人的视觉可以感知环境,而机器的视觉却很难感知环境 为了解决计算 ...

  9. C# vb .net实现色调调整特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的色调调整呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...

  10. 7 批量查询mget、批量修改bulk

    注意:当执行多条数据查询.增删改时,一定要用mget.bulk,提升性能,减少网络传输   mget   回顾:查询单个文档 GET /beauties/my/2   mget 查询多个文档: 不同 ...