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

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

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

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

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

一:界面层

二:代码层

三:数据库

四:调用

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

一:界面层,如图:

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

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

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

如图:

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

二:代码层

1.定义变量

        //页行数
public int pagesize = 20;
//当前页
public int pageIndex = 1;
//总页数
public int pageCount;

2.定义方法

        /// <summary>
/// 绑定分页控件和GridControl数据
/// </summary>
/// <author>PengZhen</author>
/// <time>2013-11-5 14:22:22</time>
/// <param name="strWhere">查询条件</param>
public void BindPageGridList(string strWhere)
{
SystemOperateLog objSOL = new BLL.SystemOperateLog(); nvgtDataPager.Buttons.CustomButtons[0].Enabled = true;
nvgtDataPager.Buttons.CustomButtons[1].Enabled = true;
nvgtDataPager.Buttons.CustomButtons[2].Enabled = true;
nvgtDataPager.Buttons.CustomButtons[3].Enabled = true;
//记录获取开始数
int startIndex = (pageIndex - 1) * pagesize + 1;
//结束数
int endIndex = pageIndex * pagesize; //总行数
int row = objSOL.GetRecordCount(strWhere); //获取总页数
if (row % pagesize > 0)
{
pageCount = row / pagesize + 1;
}
else
{
pageCount = row / pagesize;
} if (pageIndex == 1)
{
nvgtDataPager.Buttons.CustomButtons[0].Enabled = false;
nvgtDataPager.Buttons.CustomButtons[1].Enabled = false; ;
} //最后页时获取真实记录数
if (pageCount == pageIndex)
{
endIndex = row;
nvgtDataPager.Buttons.CustomButtons[2].Enabled = false;
nvgtDataPager.Buttons.CustomButtons[3].Enabled = false;
} //分页获取数据列表
DataTable dt = objSOL.GetListByPage(strWhere, "", startIndex, endIndex).Tables[0]; gridLogList.DataSource = dt; nvgtDataPager.DataSource = dt;
nvgtDataPager.TextStringFormat = string.Format("第 {0}页, 共 {1}页", pageIndex, pageCount);
}

3.定义事件

        /// <summary>
/// 按钮点击事件
/// </summary>
/// <author>PengZhen</author>
/// <time>2013-11-5 14:24:25</time>
/// <param name="sender"></param>
/// <param name="e"></param>
private void nvgtDataPager_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
{
ShowEvent("ButtonClick", e.Button);
} /// <summary>
/// 分页事件处理
/// </summary>
/// <param name="eventString">事件名称</param>
/// <param name="button">按钮控件</param>
/// <author>PengZhen</author>
/// <time>2013-11-5 14:25:59</time>
void ShowEvent(string eventString, NavigatorButtonBase button)
{
//string type = button.ButtonType.ToString();
NavigatorCustomButton btn = (NavigatorCustomButton)button;
string type = btn.Tag.ToString();
if (type == "首页")
{
pageIndex = 1;
} if (type=="下一页")
{
pageIndex++;
} if (type=="末页")
{
pageIndex = pageCount;
} if (type == "上一页")
{
pageIndex--;
} //绑定分页控件和GridControl数据
BindPageGridList(strWhere);
}

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

三:数据库

        /// <summary>
/// 获取记录总数
/// </summary>
public int GetRecordCount(string strWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(1) FROM TL_SYSTEM_OPERATE_LOGS ");
if (strWhere.Trim() != "")
{
strSql.Append(" where " + strWhere);
}
object obj = _DbHelperOra.GetSingle(strSql.ToString());
if (obj == null)
{
return 0;
}
else
{
return Convert.ToInt32(obj);
}
}
/// <summary>
/// 分页获取数据列表
/// </summary>
public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("SELECT * FROM ( ");
strSql.Append(" SELECT ROW_NUMBER() OVER (");
if (!string.IsNullOrEmpty(orderby.Trim()))
{
strSql.Append("order by T." + orderby);
}
else
{
strSql.Append("order by T.ID desc");
}
strSql.Append(")AS Rowssss, T.* from TL_SYSTEM_OPERATE_LOGS T ");
if (!string.IsNullOrEmpty(strWhere.Trim()))
{
strSql.Append(" WHERE " + strWhere);
}
strSql.Append(" ) TT");
strSql.AppendFormat(" WHERE TT.Rowssss between {0} and {1}", startIndex, endIndex);
return _DbHelperOra.Query(strSql.ToString());
}

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

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

四:调用

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

        //查询条件
private static string strWhere = string.Empty; /// <summary>
/// 查询
/// </summary>
/// <author>PengZhen</author>
/// <time>2013-10-30 11:08:03</time>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btSelect_Click(object sender, EventArgs e)
{
//获取查询条件
strWhere = GetSqlWhere(); BindPageGridList(strWhere);
} /// <summary>
/// 获取查询条件
/// </summary>
/// <author>PengZhen</author>
/// <time>2013-11-5 15:25:00</time>
/// <returns>返回查询条件</returns>
private string GetSqlWhere()
{
//查询条件
string strReturnWhere = string.Empty; //用户编号
string strUserId = string.Empty; if (!string.IsNullOrEmpty(UserManage.UserID))
{
strUserId = "12";// UserManage.UserID;
}
//分系统编码
string strSubSystemCode = string.Empty; if (cbbSubSystemCode.SelectedItem != null)
{
strSubSystemCode = (cbbSubSystemCode.SelectedItem as ComboBoxData).Value;
} //功能模块
string strFunctionModule = string.Empty; if (cbbFunctionModule.SelectedItem != null)
{
strFunctionModule = (cbbFunctionModule.SelectedItem as ComboBoxData).Value;
} //数据分类
string strDataType = string.Empty; if (tcbDataType.SelectedNode != null)
{
strDataType = tcbDataType.SelectedNode.Name;
} //操作类型
string strOperatedType = string.Empty; if (cbbOperatedType.SelectedItem != null)
{
strOperatedType = (cbbOperatedType.SelectedItem as ComboBoxData).Value;
}
//开始时间
string strStartTime = string.Empty; if (!string.IsNullOrEmpty(dateStartTime.Text))
{
strStartTime = dateStartTime.Text;
}
//结束时间
string strEndTime = string.Empty; if (!string.IsNullOrEmpty(dateEndTime.Text))
{
strEndTime = dateEndTime.Text;
} //用户ID
if (!string.IsNullOrEmpty(strUserId))
{
strReturnWhere += "USER_ID='" + strUserId + "' and";
}
//分系统代码
if (!string.IsNullOrEmpty(strSubSystemCode))
{
strReturnWhere += "SYSTEM_CODE='" + strSubSystemCode + "' and";
}
//模块编号
if (!string.IsNullOrEmpty(strFunctionModule))
{
strReturnWhere += "MODULE_ID='" + strFunctionModule + "' and";
}
//数据分类代码
if (!string.IsNullOrEmpty(strDataType))
{
strReturnWhere += "DATA_CATAGORY_CODE='" + strDataType + "' and";
}
//操作类型
if (!string.IsNullOrEmpty(strOperatedType))
{
strReturnWhere += "OPERATE_TYPE='" + strOperatedType + "' and";
}
//操作时间
if (!string.IsNullOrEmpty(strStartTime) && !string.IsNullOrEmpty(strEndTime))
{
strReturnWhere += "OPERATE_DATE between '" + strStartTime + "' and '" + strEndTime + "'";
} if (!string.IsNullOrEmpty(strReturnWhere))
{
strReturnWhere = strReturnWhere.Remove(strReturnWhere.LastIndexOf("and"));
} return strReturnWhere;
}

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

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

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

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

DevExpress通过girdcontrol实现分页的更多相关文章

  1. DevExpress 用户控件 分页(上)

    说明:使用用户控件分页,完成后,使用时非常简单,数据绑定,调用自己写的一个事件就OK了 前期准备工作: (1)添加一个用户控件 命名PageCtrl (2)打开代码:   [csharp] view ...

  2. DevExpress 用户控件 分页(中)

    说明: 1)具体调用请关注 看DevExpress 用户控件 分页(下) datanavi_ButtonClick 是DataNavigator的ButtonClikc事件 视图设计器: 分页用户控件 ...

  3. DevExpress GridControl+UserControl实现分页

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

  4. DevExpress 用户控件 分页(下)

    分页控件调用 (1)初始化时: this.pageCtrl1.pageSize = 4; (2)数据绑定时: 从数据库中获取实时的 Public void LoadData(){ //这是只写有关分页 ...

  5. 如何Windows分页控件中增加统计功能

    在我的博客里面,很多Winform程序里面都用到了分页处理,这样可以不管是在直接访问数据库的场景还是使用网络方式访问WCF服务获取数据,都能获得较好的效率,因此WInform程序里面的分页控件的使用是 ...

  6. <转>DevExpress使用经验总结

    DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用 DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示 ...

  7. DevExpress控件使用经验总结- GridView列表行号显示操作

    DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一 ...

  8. C#第三方控件的使用

    一.DEVEXPRESS的使用 官网:https://www.devexpress.com/ 入门教程:http://wenku.baidu.com/link?url=2sXEEby1ffx9JTWG ...

  9. .net_DevExpress控件使用经验总结

    (转)DevExpress控件使用经验总结DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或 ...

随机推荐

  1. python UI自动化实战记录十:执行测试及测试报告

    使用简单的unittest.TextTestRunner. 思路: 1 在report目录下创建当日测试报告目录 20190113 2 创建测试报告文件 f = 时间戳.txt 3 加载测试集,运行测 ...

  2. tp 查询数据库时报错 A non well formed numeric value encountered

    在database.php中配置或修改 'datetime_format' => false,

  3. Mutual Training for Wannafly Union #2

    codeforces 298A. Snow Footprints 分类讨论三种情况: ①..RRRRRR…  ②..LLLLLLL… ③..RRRLLLL.. //AC by lwq: #includ ...

  4. 【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

    http://blog.csdn.net/xiaominghimi/article/details/51586492 一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解R ...

  5. tmux分屏

    网上很多教程: 新手教程: tmux进入 ctrl + b 命令 % 纵向分屏 命令 方向键 切换 https://lukaszwrobel.pl/blog/tmux-tutorial-split-t ...

  6. [USACO11DEC]Umbrellas for Cows

    嘟嘟嘟 我dp真是太弱了,这么简单dp都不会. 令dp[i]表示前 i 头牛头被遮住了的最低成本.则dp[i] = min{dp[i], dp[j - 1] + c[a[i] - a[j] + 1]} ...

  7. Selenium应用代码(常见封装的方法二)

    滚动窗口: //将滚动条滚到适合的位置 , 方法一 public static void setScroll(WebDriver driver,int height){ try { // String ...

  8. Anaconda安装与常用命令及方法(深度学习入门1)

    Anaconda是一个软件发行版,它附带了 conda.Python 和 150 多个科学包及其依赖项. 安装Anaconda Anaconda分为Linux.Windows.Mac等版本,去 htt ...

  9. Xcode菜单功能中文翻译

    Xcode菜单功能中文翻译 File  文件 Edit  编辑 View 视图 Navigate 导航 Editor 编辑 Product 产品 Window  窗口 Help 帮助 File  文件 ...

  10. AngularJS 表单验证小结

    注:本文所述的表单验证即AngularJS自带的表单验证,无需引入第三方的插件 一.常用的验证特性标签 1.非空 为input加入一个required属性即可,例如: <input type=& ...