简介: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. 关于项目中的DAL数据接入层架构设计

    摘要:项目中对关系型数据库的接入再寻常不过,也有海量的ORM工具可供选择,一个一般性的DAL数据接入层的结构却大同小异,这里就分享一下使用Hibernate.Spring.Hessian这三大工具对D ...

  2. IntelliJ IDEA自动补全变量名称和属性名称的快捷键

    自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f

  3. sqlserver数据库 表中字段值有空格,如何去除空格(例如char (5) 存入数据不足5位时sqlserver会自动补空格)

    普通的空格 前后的空格,使用LTrim和RTrim即可,例如:LTrim(RTrim(Name)) 中间的空格,使用replace函数替换,例如:Replace(Name,' ','') 如果是普通的 ...

  4. BZOJ2342:[SHOI2011]双倍回文(Manacher)

    Description   Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长 ...

  5. 【转】Android之drawable state各个属性详解

    我们在定义一个drawable的时候可以通过xml定义的drawable对象.它使得一个图片能在不同的状态下显示不同的图案,比如一个Button,它有pressed,focused,或者其它状态,通过 ...

  6. 显示mac电脑中隐藏的文件和文件夹

    显示mac电脑中隐藏的文件和文件夹的办法:打开电脑,cd到相应的文件夹,输入以下命令,为显示隐藏的文件和文件夹 defaults write com.apple.finder AppleShowAll ...

  7. ORM优缺点

    优点: 1.提高了开发效率.由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的.庞大的数据访问层. 2.ORM提供了对数据库的映射,不 ...

  8. java连接数据库增删改查公共方法

    package dao; import java.io.IOException; import java.sql.CallableStatement; import java.sql.Connecti ...

  9. MVC学习十二:Ajax.ActionLink用法

    Ajax.ActionLink用法 <!--使用Ajax.BeginForm必须引用的js文件--> <script type="text/javascript" ...

  10. 【luogu P1939 【模板】矩阵加速(数列)】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1939 对于矩阵推序列的式子: 由题意知: f[x+1] =1f[x] + 0f[x-1] + 1f[x-2] ...