投资Winform分页控件重大创新,并贯彻普通版、DotNetBar、DevExpress三怪本整合创新(附各种例子源码)

By admin in 投资 on 2018年10月18日

每当Winform开发被,一直去不起头分页处理,好之分页控件封装,能吧出节省成千上万日子跟麻烦工作,对分页控件一直的改良和周到,也是自己之兴有。本次重大实现对分页控件的全面重构,优化效能与界面的处理,并联合就普通版、基于DotNetbar界面控件版本、DevExpress界面控件版本三不行版的颁发,这几乎单界面版本,除了界面表现效果不雷同外,所有的法力展示与采取代码完全一致,保证用户之学问投资以及于客户优质的使用操作。本次重大多的功用产生:可由此界面设置列表显示的排列,可复制选定的推行信息,可装显示的行号、可装显示中隔行的颜料等力量。下面分别对几乎独例子的截图进行一体化介绍,然后以事无巨细介绍

文/宝木笑

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

廖凡柏林封帝的景点无限渐渐磨灭,《师父》火爆的媒体狂潮谁还记得,在《太阳之后人》和各国大网红们狂欢的春,我怀念为廖凡写点儿东西,为了直接很喜爱的廖凡,也为了我自己……

投资 1 

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

1.柏林,柏林

些微年多过去了,你还记柏林么?

2014年2月16日,柏林,《白日焰火》夺得最佳影片金熊奖,影片男主角廖凡获封影帝。之前廖凡接受媒体采访,有新闻记者发问是否想将到影帝,这应该是围绕内最好好对的同栽问题了,什么“我只是愿意跟随伟大演员的步子”,什么“谋事在人,成事在天,能够代表中华人进军柏林对本身曾是一律宗好开森的从业了”等等,总之外交辞令绝对是既展示风度,又展现情商的超级选择。可廖凡大哥直勾勾地盯在记者说:“谁要是说好不思量得影帝,那是伪装孙子。”此道平发生,立马在网直达滋生强烈反响,有网友猛夸:“真性情!够爷们!”,有人担心:“杀伤力好酷,这得有点人口睡枪啊。”

这些年一直格外欢喜廖凡与外的创作,当时看到网友的评头品足,我想其实对廖凡而言,“性情”、“爷们”这些暂放一边,也许,那股子无数活锻炼出的犟,才是廖凡“口出狂言”的确实原因吧。凭什么我就是得随着你的点子答题?凭什么我不怕得这么非甚无存地给你们配戏?无数个“凭什么”,无数个汗水、泪水、血水的过往,让这四十年份之丈夫终于由梁朝伟手中接了影帝大奖,面对媒体之闪光灯,廖凡紧紧握在奖杯,眼神依然倔强。

廖凡获奖时说:“昨天凡元宵节,是青春底开端,也是情人节,柏林弥漫在好的含意,昨天呢是我四十年的存,这是自无比好之生日礼物。”是什么,在此浮躁的社会,在老大成名年龄值越来越小之一日游圈,四十岁,对于一个直接半吉利不上火之艺人来说,确实是只两难的岁数。

咱们华语影坛现在底花花世界更加利字当头,廖凡这样的饰演者经受着同种无奈和尴尬。投资方的老板娘们良心小算盘打得噼啪作响,始终核算着启用演员的商业风险与性价比,用一个吓演员远远不如用一个这刚好给炒火的明星来钱还快。在我们的文艺片里,“廖凡等”默默呈现着好之表演,却格外少被媒体关心以及通讯,是的,廖凡从也不是媒体的命根子,即便是柏林封帝又如何,日子还是一天天过去,两年多之流年过去了,廖凡还一直以旅途。

柏林,我永久记得廖凡紧攥奖杯时的倔强眼神。

2) 基于DotNetbar界面控件版本

投资 2 

2.苟且,远方

廖凡,1974年2月14日生于湖南长沙,他的爹爹廖丙炎曾是湖南省话剧团团长,老戏骨,母亲为当过演员,可以说凡是个艺人世家,从生有点的时廖凡就起看老人跟大伯阿姨们排练演戏了,当一称呼表演者是项顺其自然的事儿。可是,这个世上不是兼具的顺其自然都见面带来想象中的掌声和鲜花,廖凡没有像许多天地里之二代一样鲜衣怒马,少年得志。相反,廖凡的立漫长总长走之生三三两两“忒不顺”了。

廖凡曾多次说,《白日焰火》中的张自力,就是即时的融洽,那个时候廖凡刚拍了《建党伟业》,结果拍摄时于这摔下来,做了8独小时的手术,身体内放12绝望钉子,两年未可知举行特别活动。

那一年,廖凡36岁。

那无异年,同样36春秋之口还发生成百上千,林志颖、何炅、汪涵、吴彦祖、钟汉良、刘恺威、徐静蕾……当然还有大“志玲姐姐”。

倒不是非得跟自己死,非得找来与春的人数失去自寻烦恼,比单轻重,而是36年份之廖凡之前的类,确实应了那么句话“造化弄人”。电影之行当很神奇,一统片子火了,然后涨,里面的扮演者为会见一举成名,扶摇直上,如果此艺人就与达到另外一样总统火了底暴,基本上就是是走及康庄大道了,但这么的“神奇”好像从来不出现于廖凡身上。《将爱情进行到底》、《像雾像雨又比如说风》、《别了,温哥华》,《集结号》……李亚鹏、陈坤、陆毅、孙红雷、张涵予……没有廖凡,还是无廖凡。甚至并廖凡的娘亲还只能唉声叹气了,老太太已对记者说:“他还要不帅,不见面明显之”。

那年,廖凡36春秋,躺在病床上,回想这些年以天地里之跑龙套,第一次看泄气了,真心泄气了,再闹4年尽管不惑了,但自己特么还从来不“立”起来啦。所以廖凡觉得,片中的张自力“他不是一个警察,而是一个失败者”,张自力的任何人生还在倒退,廖凡说自己于第一不好读剧本的当儿,在宣读到张自力从吴志贞,回过头看到一串串脚印,他头皮发麻,这种感觉像已相识,那种失败与失意之心气一下子相通了。廖凡对记者说,接《白日焰火》之前,他睡在病床上,无所事事,眼睛看在龙花板,心里就是当窃窃私语啊——“都立年数的人矣,结果关系到当时份儿上”,然后眼泪便于眼里打转。结果,《白日焰火》有场戏,廖凡醉熏熏地卧在零下三十多渡过雪地里,一个路人打开他的帽子,装模作样的了解了几乎词,发现他确实醉的要命了,然后便拿他的摩托车顺走了。

廖凡嚎啕大哭。

自以电影笔记及观望说,这个哭确实是本子要求的,但导演也要求又又拍一涂鸦,原因即是“真实得多少过于”,让丁内心其实太拧巴了。

廖凡说,当时以外景地,天特别冷,他胡子拉碴地堆坐于那边,不知怎么的,就想到了温馨的上演生涯,这些年控制太久的事物还爆发了。

说实话,看到这个桥段,联想到廖凡的那句“都立年数底总人口矣,结果干及这份儿上”,我心里特别没。小学的时节修过说心情沉重的时刻,叫“心里像灌了铅一样”,少年不识愁滋味,现在自我耶急忙36了,每每想到廖凡的那场戏和那么句话,回想自己,怅然若失。上周转母校看了圈,樱花开得实在好,落英缤纷,树生是在校的学弟学妹们以蹦蹦跳跳拍照留念,我想起这以高等学校之时刻,我与趟上的同室也是这么过青春底吧,那个时候最担心之饶是找不交对象。去年,毕业十年聚会,大家彼此拥抱,没有露脸的传奇出现在我们中间,我们尽管像所有上班族平默默地生长,我们回忆无数校的美好时光,却没有人另行谈起当年底精。

前段时间,看到成千上万“苟且”和“远方”为问题之章,数量之多给自身无地自容,为啥我不怕形容不下一篇呢?今天在讹诈着当时篇有关廖凡的章的早晚,我晓得了,其实自己无流去描绘那样的话题。需要哪的周折和煎熬,才能够叫一个总人口不得不承受“苟且”二许。又是得怎么样的要强和倔强,才会吃一个人口即使于在碾压在泥土里,仍然会用眼角的余光死挺盯在“远方”。

我眷恋,在廖凡身上,我看出了“苟且”是何其的被人良心憋屈,无处发泄,欲哭无泪,欲吼无声。在廖凡身上,我吧看到了“远方”对于如且生活在的普罗民众,就是泥泞路边的那朵洁白的小花,就是咱龟裂的手里那捧清凉之甘泉。

自己得“苟且”一生,但从不人会剥夺我的“远方”!

3) 基于DevExpress界面控件版本

投资 3 

3.除了针对友好杀人不眨眼,我找找不交现的摆

圈里人都如廖凡为“戏痴”,说廖凡以戏里对待自己虽一个字儿——狠。

《白日焰火》的女主桂纶镁说:“我觉着自家平直到现在都非晓得认不认廖凡,他的食指以拍戏过程被了在在他的角色里面。”片子需要廖凡增肥,廖凡就快快增肥20斤。片子需要熟悉基层派出所警员的存,廖凡一用就是是三个月。

高等学校毕业时,廖凡同学对廖凡的评说是“不善应酬、人情世故了解得不那么透彻”,在朋友圈子里,廖凡为吃看有些傻,生活智慧方面反响有点慢。是呀,这个男人,长得不漂亮,也未明了啊习俗世故,个人事业为是共同坎坷,周围的人头都红了,就剩下这个男人还当聚光灯的背面,只能一次次扣押在别人侃侃而谈。

要强啊,真不思量就是这样在在什么,倒不是当人家帅,咱们就得帅,但就算不甘心,凭什么我充分?为什么我不怕变成了今天夫熊样儿了?我思,每个男人到了必然的年龄,一定会如廖凡同问了自己仿佛之问题,当年春晚《时间还去啊了》与二十四孝成功嫁接,唱哭了过多丁,最近零星年又任立即篇歌唱,也会见无意眼圈发红,但又多之可是廖凡那样的反省。

好吧,如果天空还吃自家留了什么,那就是单单剩下了我自己,除了针对团结恨,我实在都摸索不至发的道,当自己汗流浃背,当自己泪流满面,当自家默然着低头艰难前执行,成功其实已经无所要,我就是急需给自己一个说法。

于是,拍《一半海水一半火苗》时,导演要求凡“瘦”,拍摄地广东温过30渡过,廖凡天天在海边跑步,每天6公里,被海风吹的以关联以薄。有场戏,廖凡疯狂踢门,导演喊了几差卡,他的下边还无停息,演结束之后排下袜子,血肉模糊,脚趾甲掉了一半,与其说就是均等栽敬业,更不如说这是相同种植浮泛。

本人得以领你给自身施加的所有“苟且”,但你永远无法剥夺我对自己杀人不眨眼的权。

纵使我一生注定就如此永远“苟且”下去,但要自己还在世在,我不怕无见面虚度光阴,我周围的各级一样项麻烦事都是自己的武器,是自己甩这世间样不平的投枪。

发出雷同栽倔强叫廖凡。

-END-

采用分页控件的功底代码,在具有以上版本被,代码都一致,只是一些特殊之操作,需要使用到不同的控件,有所区别而已。初始化分页控件代码如下所示。

        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)设置表格列的可见性 

投资 4 
 2)表格数据打印预览

 投资 5

3)行数据核心信息提醒 

投资 6 

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

 投资 7

为使大家对自身之Winform分页控件在不同情况下的深深摸底与动,我特别编写了几乎栽情况下的采用正式例子,供大家下载上研究,例子包括用基于泛型模式的Winform开发框架结构的分页控件使用例子,基于风精炼多少绑定的分页控件使用例子,
基于DotNetBar界面控件及简便多少绑定的分页控件使用例子,基于DevExpress界面控件及简便多少绑定的分页控件使用例子,如下图所著。

投资 8 

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

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 mobile.365-838.com 版权所有