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. Node.js 多线程完全指南

    [原文] 很多人都想知道单线程的 Node.js 怎么能与多线程后端竞争.考虑到其所谓的单线程特性,许多大公司选择 Node 作为其后端似乎违反直觉.要想知道原因,必须理解其单线程的真正含义. Jav ...

  2. Harbor密码重置 密码修改 admin密码重置

    Harbor密码重置harbor现在是使用postgresql 数据库了.不再支持mysql,网上有N多重置Mysql密码的,可以略过了.我密码错了默认的Harbor12345 修改为: RedHat ...

  3. win7/win10 设置始终以管理员身份运行cmd窗口

    在桌面上找到cmd快捷方式图标,右键"属性" 4.选择"快捷方式",点击“高级” 5.勾选用管理员身份运行,点击"确定" 6.点击" ...

  4. [十一集训] Day1 (2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018))

    A Altruistic Amphibians 原题 题目大意: n只青蛙在高度为d的井中,每只有跳跃距离.重量和高度,每只青蛙可以借助跳到别的青蛙的背上而跳出井,每只青蛙能承受的最大重量是自身重量, ...

  5. Qt 5.12 LTS 部署

    1. 拷贝release生成的exe到一个独立的目录deploy 2. windeployqt.exe A_Toolkit.exe 3. 将qt\qt5.12.5\tool\mingw730_64\b ...

  6. java笔记--java的语言特性

    java的语言特性 1.简单性:例如:java不再支持多继承,而c++是支持多继承的,多继承比较复杂. c++中有指针,java中屏蔽了指针的概念.所以相对来说比较简单. //注:java语言的底层是 ...

  7. 经典例题(Python)

    经典例题 if嵌套 1.用户输入账号2.用户输入密码3.判断用户的账号是不是alex4.如果账号是alex在继续判断密码是不是alexdsb5.账号和密码都正确提示用户alex就是一个dsb6.如果账 ...

  8. linux全面详细转载文章

    在网上发现了一位大佬写的linux各种命令.系统.配置等的详细解析,在此转载保留以便学习! 骏马金龙https://www.cnblogs.com/f-ck-need-u/p/7048359.html

  9. STL对map排序

    // sort start typedef struct{ ... }Node; // Map的键是字符串,值是结构体.虽然有自动排序特性,但是按字符串的排序并不能符合要求.此时,Map的key可以视 ...

  10. XGBoost对波士顿房价进行预测

    import numpy as np import matplotlib as mpl mpl.rcParams["font.sans-serif"] = ["SimHe ...