OracleWinform分页控件重大创新,并落实普通版、DotNetBar、DevExpress三怪版整合创新(附各种例子源码)

于Winform开发中,一直去不开分页处理,好之分页控件封装,能吧开发节省成千上万岁月与麻烦工作,对分页控件一直的改良与健全,也是自身的兴有。本次重大实现对分页控件的圆重构,优化作用跟界面的拍卖,并统一就普通版、基于DotNetbar界面控件版本、DevExpress界面控件版本三老本的颁布,这几单界面版本,除了界面表现效果不同等他,所有的效应展示以及以代码完全一致,保证用户的知投资与于客户可以的行使操作。本次重大多的效用来:可通过界面设置列表显示的排,可复制选定的执行信息,可设置显示的行号、可装显示其中隔行的颜料相当功用。下面分别指向几个例证的截图进行完全介绍,然后于事无巨细介绍

1)普通版(即未引用任何第三着界面控件)效果图

Oracle 1 

高达图备受,红色的食谱是分页控件内置的菜肴单项,其他程序附加是扩张菜单种类,其中复制选定行信息、设置表格显示列、打印列表是对表基本的操作功能。下面两单本子的控件右键菜单都展现一致。 

2) 基于DotNetbar界面控件版本

Oracle 2 

3) 基于DevExpress界面控件版本

Oracle 3 

使分页控件的底子代码,在有以上版本被,代码都一致,只是一对异样的操作,需要采取到不同的控件,有所区别而已。初始化分页控件代码如下所示。

        private void FrmCustomer_Load(object sender, EventArgs e)
        {
            this.winGridViewPager1.ProgressBar = this.toolStripProgressBar1.ProgressBar;
            this.winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged);
            this.winGridViewPager1.OnStartExport += new EventHandler(winGridViewPager1_OnStartExport);
            this.winGridViewPager1.OnEditSelected += new EventHandler(winGridViewPager1_OnEditSelected);
            this.winGridViewPager1.OnDeleteSelected += new EventHandler(winGridViewPager1_OnDeleteSelected);
            this.winGridViewPager1.OnRefresh += new EventHandler(winGridViewPager1_OnRefresh);
            this.winGridViewPager1.OnAddNew += new EventHandler(winGridViewPager1_OnAddNew);
            this.winGridViewPager1.AppendedMenu = this.contextMenuStrip1;//追加额外菜单种类
            this.winGridViewPager1.ShowLineNumber = true;//显示行号
            this.winGridViewPager1.PagerInfo.PageSize = 30;//页面大小
            this.winGridViewPager1.EventRowBackColor = Color.LightCyan;//间隔颜色

            BindData();
       }

 以上是针对分页控件的相干事件展开处理,如果实现了有关的风波,那么相应的菜单(如新增、编辑、删除等)就见面在右键菜单中冒出,否则不见面面世,相应的轩然大波就是是现实性对诺操作的处理菜单操作。另外,分页控件的一对属性,如是否出示行号、页面显示记录大小、间隔颜色等属性为堪当此处设置。

这些初始化设置完后,一般查询界面都见面有一个谱的做,然后经整合条件查询数据库记录并显示,显示的时光,分页控件可以装对承诺字段的华语显示名称,显示的字段列,显示顺序等。显示字段的逐一就是列表的显得顺序,这个特点也是初本子增加的效用有。        

       private void winGridViewPager1_OnPageChanged(object sender, EventArgs e)
        {
            BindData();
        }

        /// <summary>
        /// 根据查询条件构造查询语句
        /// </summary>
        /// <returns></returns>
        private string GetSearchSql()
        {
            SearchCondition condition = new SearchCondition();
            condition.AddCondition(“Number”, this.txtNumber.Text, SqlOperator.Like)
                .AddCondition(“Name”, this.txtName.Text, SqlOperator.Like)
                .AddCondition(“Type”, this.cmbType.Text, SqlOperator.Like)
                .AddCondition(“Area”, this.cmbArea.Text, SqlOperator.Like)
                .AddCondition(“Address”, this.txtAddress.Text, SqlOperator.Like)
                .AddCondition(“Company”, this.txtCompany.Text, SqlOperator.Like)
                .AddCondition(“Note”, this.txtNote.Text, SqlOperator.Like)
                .AddCondition(“Telephone1”, this.txtTelephone.Text, SqlOperator.Like, true, “Telephone”)
                .AddCondition(“Telephone2”, this.txtTelephone.Text, SqlOperator.Like, true, “Telephone”)
                .AddCondition(“Telephone3”, this.txtTelephone.Text, SqlOperator.Like, true, “Telephone”)
                .AddCondition(“Telephone4”, this.txtTelephone.Text, SqlOperator.Like, true, “Telephone”)
                .AddCondition(“Telephone5”, this.txtTelephone.Text, SqlOperator.Like, true, “Telephone”);

            if (chkUseDate.Checked)
            {
                condition.AddCondition(“CreateDate”, dateTimePicker1.Value.ToString(“yyyy-MM-dd”), SqlOperator.MoreThanOrEqual, true)
                    .AddCondition(“CreateDate”, dateTimePicker2.Value.AddDays(1).ToString(“yyyy-MM-dd”), SqlOperator.LessThanOrEqual, true);

            }
            string where = condition.BuildConditionSql().Replace(“Where”, “”);
            return where;
        }

        private void BindData()
        {
            #region 添加别名解析
            //DisplayColumns与显的字段名或者实体性质一致,大小写不灵动,顺序代表显示顺序,用逗号或者|分开
            this.winGridViewPager1.DisplayColumns = “Number,NAME,type,Area,Company,Address,Telephone1,Telephone2,Telephone3,Telephone4,Telephone5,CreateDate,Note,LastUpdated”;
            this.winGridViewPager1.AddColumnAlias(“ID”, “编号”);
            this.winGridViewPager1.AddColumnAlias(“Number”, “客户编号”);
            this.winGridViewPager1.AddColumnAlias(“Name”, “客户称”);
            this.winGridViewPager1.AddColumnAlias(“Type”, “客户类型”);
            this.winGridViewPager1.AddColumnAlias(“Area”, “客户地区”);
            this.winGridViewPager1.AddColumnAlias(“Company”, “客户单位”);
            this.winGridViewPager1.AddColumnAlias(“Address”, “客户地址”);
            this.winGridViewPager1.AddColumnAlias(“Telephone1”, “电话1”);
            this.winGridViewPager1.AddColumnAlias(“Telephone2”, “电话2”);
            this.winGridViewPager1.AddColumnAlias(“Telephone3”, “电话3”);
            this.winGridViewPager1.AddColumnAlias(“Telephone4”, “电话4”);
            this.winGridViewPager1.AddColumnAlias(“Telephone5”, “电话5”);
            this.winGridViewPager1.AddColumnAlias(“CreateDate”, “开户日期”);
            this.winGridViewPager1.AddColumnAlias(“Shop_ID”, “分店ID”);
            this.winGridViewPager1.AddColumnAlias(“Note”, “备注”);
            this.winGridViewPager1.AddColumnAlias(“LastUpdated”, “更新日期”);

            #endregion

            string where = GetSearchSql();
            this.winGridViewPager1.DataSource = BLLFactory<Customer>.Instance.Find(where, this.winGridViewPager1.PagerInfo);
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            BindData();
        }

多丁先看了我介绍分页控件的用法的时刻,总会看上面的数量绑定方式接近简单,实际操作可能绑定数据连接发生题目,因为无理解Find函数里面待贯彻那些操作,因为这些是冲自身框架的应用逻辑。其实Find方法就是是依据分页属性计算获取相应记录,然后将总记录数赋值给分页控件的性。

脚我们来介绍一个免欲依赖我之Winform框架好像,只是引用微软EnterpriseLibary数据库操作类即可完成的操作,因为时的分页控件集成了一个冲Oracle、SqlServer、Access、Mysql数据库的分页逻辑,只需要用PagerHelper这个仿佛,传入相关的参数即可。

分页控件绑定数据如下代码所示。

        private void BindData()
        {
            #region 添加别名解析
            //DisplayColumns与显的字段名或者实体性质一致,大小写不灵活,顺序代表显示顺序,用逗号或者|分开
            this.winGridViewPager1.DisplayColumns = “Number,NAME,type,Area,Company,Address,Telephone1,Telephone2,Telephone3,Telephone4,Telephone5,CreateDate,Note,LastUpdated”;
            this.winGridViewPager1.AddColumnAlias(“ID”, “编号”);
            this.winGridViewPager1.AddColumnAlias(“Number”, “客户编号”);
            this.winGridViewPager1.AddColumnAlias(“Name”, “客户称”);
            this.winGridViewPager1.AddColumnAlias(“Type”, “客户类型”);
            this.winGridViewPager1.AddColumnAlias(“Area”, “客户地区”);
            this.winGridViewPager1.AddColumnAlias(“Company”, “客户单位”);
            this.winGridViewPager1.AddColumnAlias(“Address”, “客户地址”);
            this.winGridViewPager1.AddColumnAlias(“Telephone1”, “电话1”);
            this.winGridViewPager1.AddColumnAlias(“Telephone2”, “电话2”);
            this.winGridViewPager1.AddColumnAlias(“Telephone3”, “电话3”);
            this.winGridViewPager1.AddColumnAlias(“Telephone4”, “电话4”);
            this.winGridViewPager1.AddColumnAlias(“Telephone5”, “电话5”);
            this.winGridViewPager1.AddColumnAlias(“CreateDate”, “开户日期”);
            this.winGridViewPager1.AddColumnAlias(“Shop_ID”, “分店ID”);
            this.winGridViewPager1.AddColumnAlias(“Note”, “备注”);
            this.winGridViewPager1.AddColumnAlias(“LastUpdated”, “更新日期”);

            #endregion

            string where = GetSearchSql();
            this.winGridViewPager1.DataSource = FindToDataTable(where, this.winGridViewPager1.PagerInfo);
       } 

FindToDataTable函数的连带落实代码如下所示:

        /// <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>    
        /// 执行SQL查询语句,返回查询结果的保有记录的首先个字段,用逗号分隔。    
        /// </summary>    
        /// <param name=”sql”>SQL语句</param>    
        /// <returns>    
        /// 返回查询结果的富有记录之率先个字段,用逗号分隔。    
        /// </returns>    
        public string SqlValueList(string sql)
        {
            StringBuilder result = new StringBuilder();
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand command = db.GetSqlStringCommand(sql);

            using (IDataReader dr = db.ExecuteReader(command))
            {
                while (dr.Read())
                {
                    result.AppendFormat(“{0},”, dr[0].ToString());
                }
            }
            string strResult = result.ToString().Trim(‘,’);
            return strResult;
        }

        /// <summary>    
        /// 执行SQL查询语句,返回所有记录之DataTable集合。    
        /// </summary>    
        /// <param name=”sql”>SQL查询语句</param>    
        /// <returns></returns>    
        public DataTable SqlTable(string sql)
        {
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand command = db.GetSqlStringCommand(sql);
            return db.ExecuteDataSet(command).Tables[0];
         }

 利用控件内置的分页辅助类

 

WHC.Pager.WinControl.PagerHelper,你便得毫无理会各种不同数据库的分页实现逻辑,只待按以上的调用方式调用即可,此类传入的率先只参数,既可是表名,也得是均等截查询语句,非常便宜各种繁复条件的查询分页

 

流行分页控件的相干界面截图如下所示。

1)设置表格列的可见性 

Oracle 4 
 2)表格数据打印预览

 Oracle 5

3)行数据主导信息提醒 

Oracle 6 

 4)复制选定行后当文件中查

 Oracle 7

为了使大家对己的Winform分页控件在不同情形下之深透摸底及运,我专门编写了几种植情形下的运规范例子,供大家下载学习研讨,例子包括运用基于泛型模式之Winform开发框架结构的分页控件使用例子,基于传统精炼多少绑定的分页控件使用例子,
基于DotNetBar界面控件及简便多少绑定的分页控件使用例子,基于DevExpress界面控件及简便多少绑定的分页控件使用例子,如下图所显示。

Oracle 8 

各种例子的源码的下载地址如下:http://www.iqidi.com/download/TestWinPager_Demo.rar 

 

相关文章