zoukankan      html  css  js  c++  java
  • Winform分页控件之纯分页显示处理

    在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情况,不过有时候需要更进一步对列表控件进行设置修改或者实现一些特殊的显示效果的时候,这种绑定列表控件的分页控件方式就有点捉襟见肘了。为了解决这个问题,我对分页控件进行稍微的调整,使其支持分页和列表控件分开的情况,具体实现以及效果是如何的呢,下面我们来分析了解下。

    1、单独的分页信息控件

    在我的开发设计过程总,实现一些关键的属性及操作后,它就可以作为一个独立的分页控件进行使用了。

    运行的时候效果如下所示:

    2、分页控件的使用

    在实际使用的时候,我们把分页控件的dll导入到工具栏里面,然后我们在VS的控件集合里面就可以看到它的图标了。拖动到界面上就实现了分页控件的布局显示了。

    由于这个纯分页没有列表控件,这个列表就需要自己放到你的界面上去,由于列表控件如DataGridView(传统控件)或者GridControl(DevExpress控件)是独立的,因此可以自由设计调整,列表的样式以及事件处理都合分页控件没有必然的联系。

    使用代码如下所示:

    复制代码
           private void FrmCustomerPager_Load(object sender, EventArgs e)
            {
                this.pager1.PageChanged += new WHC.Pager.WinControl.PageChangedEventHandler(pager1_PageChanged);
                this.pager1.ExportCurrent += new WHC.Pager.WinControl.ExportCurrentEventHandler(pager1_ExportCurrent);
                this.pager1.ExportAll += new WHC.Pager.WinControl.ExportAllEventHandler(pager1_ExportAll);
    
                BindData();
            }
    
            void pager1_PageChanged(object sender, EventArgs e)
            {
                BindData();
            }
    
            void pager1_ExportCurrent(object sender, EventArgs e)
            {
                MessageUtil.ShowTips("导出当前页");
            }
    
            void pager1_ExportAll(object sender, EventArgs e)
            {
                MessageUtil.ShowTips("导出所有");
            }        
            
            
            /// <summary>
            /// 标准的记录查询函数
            /// </summary>
            /// <param name="where"></param>
            /// <param name="pagerInfo"></param>
            /// <returns></returns>
            private DataTable FindToDataTable(string where, PagerInfo pagerInfo)
            {
                WHC.Pager.WinControl.PagerHelper helper = new WHC.Pager.WinControl.PagerHelper("All_Customer", "*", "LastUpdated", pagerInfo.PageSize, pagerInfo.CurrenetPageIndex, true, where);
                string countSql = helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.Access, true);
                string dataSql = helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.Access, false);
    
                string value = SqlValueList(countSql);
                pagerInfo.RecordCount = Convert.ToInt32(value);//为了显示具体的信息,需要设置总记录数
    
                DataTable dt = SqlTable(dataSql);
                return dt;
            }
    
            /// <summary>
            /// 根据查询条件构造查询语句
            /// </summary>
            /// <returns></returns>
            private string GetSearchSql()
            {
                SearchCondition condition = new SearchCondition();
                condition.AddCondition("Name", this.txtName.Text, SqlOperator.Like)
                    .AddCondition("Type", this.cmbType.Text, SqlOperator.Like)
                    .AddCondition("Area", this.cmbArea.Text, SqlOperator.Like);
                string where = condition.BuildConditionSql().Replace("Where", "");
                return where;
            }
            #endregion
    
            private void BindData()
            {
                string where = GetSearchSql();
                this.pager1.PageSize = 30;
                DataTable dt = FindToDataTable(where, this.pager1.PagerInfo);            
                this.gridControl1.DataSource = dt;
            }
    
            private void btnSearch_Click(object sender, EventArgs e)
            {
                BindData();
            }
    复制代码

    从上面的代码,我们可以看到,使用起来还是很方便简洁的,关键代码就是下面这几行:

    复制代码
           private void FrmCustomerPager_Load(object sender, EventArgs e)
            {
                this.pager1.PageChanged += new WHC.Pager.WinControl.PageChangedEventHandler(pager1_PageChanged);
                this.pager1.ExportCurrent += new WHC.Pager.WinControl.ExportCurrentEventHandler(pager1_ExportCurrent);
                this.pager1.ExportAll += new WHC.Pager.WinControl.ExportAllEventHandler(pager1_ExportAll);
    
                BindData();
            }
    
            private void BindData()
            {
                string where = GetSearchSql();
                this.pager1.PageSize = 30;
                DataTable dt = FindToDataTable(where, this.pager1.PagerInfo);            
                this.gridControl1.DataSource = dt;
            }
    复制代码

    这样独立的纯粹的分页,给了列表展示控件最大的弹性,可以在一些复合列、复杂列表中提供很好的整合效果,弥补一些特殊分页碰到的问题。

    除了DevExpress样式,还提供了传统界面样式、DotNetBar界面样式几种效果,如下所示。

    主要研究技术:代码生成工具、Visio二次开发、送水管理软件等共享软件开发
    专注于Winform开发框架、WCF开发框架的研究及应用。
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
     
  • 相关阅读:
    链表 | 将递增有序的两个链表的公共元素合并为新的链表
    链表 | 将两个递增链表合并为一个递减链表
    雪花特效
    vuex笔记
    Vue路由
    Vue框架使用sass
    vue组件通信
    vue请求数据
    07_06.哈夫曼树
    07_05.通过链接实现二叉树及其遍历
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2679383.html
Copyright © 2011-2022 走看看