Winform分页控件实现普通版、DotNetBar、DevExpress三大版本整合

Winform分页控件实现普通版、DotNetBar、DevExpress三大版本整合,第1张

概述在Winform开发中,一直离不开分页处理,好的分页控件封装,能为开发节省很多时间和繁琐工作,对分页控件一直的改进和完善,也是我的兴趣之一。本次主要实现对分页控件的全面重构,优化功能及界面的处理,并统一完成普通版、基于DotNetbar界面控件版本、DevExpress界面控件版本三大版本的发布,这几个界面版本,除了界面表现效果不一样外,所有的功能展示及使用代码完全一致,保证用户的知识投资及给客户

在Winform开发中,一直离不开分页处理,好的分页控件封装,能为开发节省很多时间和繁琐工作,对分页控件一直的改进和完善,也是我的兴趣之一。本次主要实现对分页控件的全面重构,优化功能及界面的处理,并统一完成普通版、基于DotNetbar界面控件版本、DevExpress界面控件版本三大版本的发布,这几个界面版本,除了界面表现效果不一样外,所有的功能展示及使用代码完全一致,保证用户的知识投资及给客户良好的使用 *** 作。本次主要增加的功能有:可通过界面设置列表显示的列,可复制选定的行信息,可设置显示的行号、可设置显示间隔行的颜色等功能。下面分别对几个例子的截图进行总体介绍,然后在详细介绍。

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

  @H_419_26@

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

  2) 基于DotNetbar界面控件版本

  @H_419_26@

  3) 基于DevExpress界面控件版本

  @H_419_26@

  使用分页控件的基础代码,在所有以上版本中,代码均一致,只是一些特殊的 *** 作,需要利用到不同的控件,有所差异而已。初始化分页控件代码如下所示。
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","Telephone")
.AddCondition
("Telephone3","Telephone")
.AddCondition

("Telephone4","Telephone")
.AddCondition
("Telephone5","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,

Telephone3,"更新日期");

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

  @H_419_26@

  2)表格数据打印预览

  @H_419_26@

  3)行数据基本信息提示

  @H_419_26@

   4)复制选定行后在文本中查看

  @H_419_26@

  为了使得大家对我的Winform分页控件在不同情况下的深入了解和使用,我特意编写了几种情况下的使用标准例子,供大家下载学习研究,例子包括利用基于泛型模式的Winform开发框架结构的分页控件使用例子,基于传统简单数据绑定的分页控件使用例子, 基于DotNetbar界面控件及简单数据绑定的分页控件使用例子,基于DevExpress界面控件及简单数据绑定的分页控件使用例子,如下图所示。

@H_419_26@

 
总结

以上是内存溢出为你收集整理的Winform分页控件实现普通版、DotNetBar、DevExpress三大版本整合全部内容,希望文章能够帮你解决Winform分页控件实现普通版、DotNetBar、DevExpress三大版本整合所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1180005.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存