在之前介绍的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界面样式几种效果,如下所示。