DevExpress中实现GridControl的分页功能

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

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

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

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

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

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

一:界面层

二:代码层

三:数据库

四:调用

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

一:界面层,如图:

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

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

ShowToolTips=true;将下图中圈中的按钮属性visible=False;

如图:

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

二:代码层

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

原文地址:https://www.cnblogs.com/mq0036/p/10813957.html

时间: 2024-07-29 16:37:50

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

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

分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其特点是对内存中数据量存储不大,只是缺点就是要对数据库不断的进行访问:而对逻辑分页来说,就有所不同,它是一下子就把所有的数据全部查询出来,然后放入到内存中,访问速度快,缺点就是对内存空间不足,数据量过大. select * from stu limit 5; // offset 偏移前面的多少条,offset 1 跳过前面的一条 select

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

OptionsBehavior.Editable = true时,会有二个对象触发事件:view触发ShownEditor 事件(第一单击时)和内置编辑器的DoubleClick事件所以必须处理这二个事件: private void gridView1_ShownEditor(object sender, System.EventArgs e){    DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.Xtra

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

winform开发,用devexpress中的gridcontrol控件,头部默认是3D样式,当客户希望像内容一样扁平化显示且需要添加垂直线(右边框)时恶梦开始了..经过一阵摸索发现可以这样解决: 1.设置GridControl的GridView控件的PaintStyleName属性为Web 2.为GridControl的GridView控件添加CustomDrawColumnHeader事件,参考代码如下: private void gridView1_CustomDrawColumnHead

创建有输出参数的存储过程并在c#中实现DataGridView分页功能

不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure usp_getPage1 go create procedure usp_getPage1--存储过程名称 @count int output,--输出参数 @countIndex int=1,--参数带默认值 @countPage int=5--参数带默认值 as --一个sql语句.ROW_N

ASP.NET中利用DataGrid的自定义分页功能

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍一下我在项目中用到的分页

devexpress中gridcontrol 一些样式改变

改变footer为扁平化效果 整个footer背景色CustomDrawFootere.Appearance.BackColor = Color.Transparent; e.Appearance.DrawBackground(e.Graphics, e.Cache, e.Bounds); e.Handled = true; 单个列footer背景CustomDrawFooterCelle.Appearance.BackColor = Color.Lavender; e.Appearance.D

DevExpress中GridControl的属性设置

1.隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值 sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString(); 3.数据只读 gridView1.OptionsBehavior.Editable=false; 4.不显示MasterDetailView gridView1.OptionsDetail.EnableM

winform中DataGridView实现分页功能

http://liyaguang20111105.blog.163.com/blog/static/19929420220146283255809/ 在winform的设计中,要实现对DataGridView控件的分页功能,需要两个控件:BindingSource.BindingNavigator,根据需求可对BindingNavigator进行自由的扩展,下图的示例则是根据一般需求对分页功能的实现.红色区域是对BindingNavigator控件扩展后的效果. 具体实现过程 : //窗体构造方

sf中标准的分页功能介绍

世上本无事,庸人自扰之.我喜欢一个相对比较安静的环境去学习和工作,希望在一个掉一根针的声音都能够听到的环境中,但是有时候往往相反,一片嘈杂,我改变不了周围的环境,只能改变自己,其实这些都没有什么,也许是我内心就很嘈杂,使我听到一点点声音就感觉很烦躁.上善若水,心静则情静继而人静. 言归正传: sf中标准的分页功能: sf有自己标准的分页功能,sf真是个功能相当完善的云端开发平台,其有好多自己标准的功能,今天我就根据自己的理解先介绍一下sf标准的分页功能的皮毛. 定义关联到前台的Contet值 p