Winform分页控件使用详细介绍

自从上篇随笔《Winform分页控件最新版本发布,并提供基于DotNetBar界面的版本》介绍了最新版本的分页控件,并提供下载使用后,很多人对分页控件非常感兴趣(毕竟Winform数据分页是很常见的),并关注该分页控件应该如何使用,其实分页控件在之前很多篇随笔中断断续续都有介绍,为了使大家对分页控件有个系统的认识,本篇详细介绍分页控件的一些属性设置及相关使用注意事项,使大家对该分页控件有一个更深的了解、跟系统的认识,以便在相关的项目开发中熟练使用。
分页控件效果

 

 

实现步骤

 1、在Visual Studio开发环境的工具箱中,添加一个分页控件(可以其他名称)的项目,然后选择WHC.Pager.WinControl.dll文件,导入分页控件的工具箱图标,如下所示。

其中WinGridViewPager和WinGridView两个控件就是我们常用到的分页控件,两者用法几乎一致,界面效果不同在于WinGridViewPager具有分页工具条,而WinGridView是提供显示所有内容,没有工具条。

2、拖动到指定的窗体中。

3、在代码引用相关的代码实现动态调用。 

实现代码

1、在窗体加载实现中添加分页控件的实现代码,以On开始的是相关操作的实现事件,如OnPageChanged表示分页控件页面发生变化的时候,需要实现的事件处理(这个是必须的),另外AppendedMenu是可以在分页控件自带菜单上增加的菜单,如下所示。注意,只要实现相关的事件处理,那么对应的上下文菜单将会出现,默认几个标准的上下文菜单如下所示,包含新建、编辑选定项、删除选定项、打印列表、刷新列表菜单。
注意,为了使分页控件能够显示总数,并记住当前的分页,那么在OnPageChanged实现中需要修改分页控件的 

RecordCount和
 

CurrenetPageIndex
 这两个属性。

如果需要添加自己的菜单,则指定AppendedMenu对象即可。

主要实现代码如下: 

 private void FrmCustomer_Load(object sender, EventArgs e)    

{    
    BindData();    
   
    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;   
}

2、其他代码的实现如下所示,包含分页事件、刷新事件、删除事件、编辑事件、新增事件、导出Excel事件等。 

private void winGridViewPager1_OnPageChanged(object sender, EventArgs e)    
{    
    BindData();    
}    
   
private void winGridViewPager1_OnRefresh(object sender, EventArgs e)    
{    
    BindData();    
}    
   
private void winGridViewPager1_OnDeleteSelected(object sender, EventArgs e)    
{    
    if (MessageUtil.ShowYesNoAndTips("您确定删除选定的记录么?") == DialogResult.No)    
    {    
        return;    
    }    
   
    DataGridView grid = sender as DataGridView;    
    if (grid != null)    
    {    
        foreach (DataGridViewRow row in grid.SelectedRows)    
        {    
            BLLFactory<Customer>.Instance.Delete(row.Cells[0].Value.ToString());    
        }    
        BindData();    
    }    
}    
   
private void winGridViewPager1_OnEditSelected(object sender, EventArgs e)    
{    
    DataGridView grid = sender as DataGridView;    
    if (grid != null)    
    {    
        foreach (DataGridViewRow row in grid.SelectedRows)    
        {    
            FrmEditCustomer dlg = new FrmEditCustomer();    
            dlg.ID = row.Cells[0].Value.ToString();    
            if (DialogResult.OK == dlg.ShowDialog())    
            {    
                BindData();    
            }    
   
            break;    
        }    
    }    
}    
   
private void winGridViewPager1_OnAddNew(object sender, EventArgs e)    
{    
    btnAddNew_Click(null, null);    
}    
   
private void winGridViewPager1_OnStartExport(object sender, EventArgs e)    
{    
    string where = GetSearchSql();    
    this.winGridViewPager1.AllToExport = BLLFactory<Customer>.Instance.FindToTable(where);    
}    
   
private void BindData()    
{   
    #region 添加别名解析    
    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);    
    this.winGridViewPager1.dataGridView1.Refresh();    
}

3、如果不想把所有的实体类属性或者表字段都显示处理(默认全部显示),那么可以设置属性DisplayColumns即可。
this.winGridViewPager1.DisplayColumns = "ID,ItemNo,ItemName,Manufacture,MapNo,Specification,StockQuantity,AlarmQuantity,WareHouse";   

4、设备报表标题如下所示。 

this.winGridViewPager1.PrintTitle = Portal.gc.gAppUnit + " -- " + "备件信息报表";   

5、绑定自定义Datatable对象的实现。

private void BindData()    
{    
    this.winGridViewPager1.DisplayColumns = "ID,ItemNo,ItemName,Manufacture,MapNo,Specification,Material,ItemBigType,ItemType,
Unit,Price,Source,StoragePos,UsagePos,StockQuantity,AlarmQuantity,Note,Dept,WareHouse";   
    #region 添加别名解析    
   
    this.winGridViewPager1.AddColumnAlias("ID", "编号");    
    this.winGridViewPager1.AddColumnAlias("ItemNo", "项目编号");    
    this.winGridViewPager1.AddColumnAlias("ItemName", "项目名称");    
    this.winGridViewPager1.AddColumnAlias("Manufacture", "供货商");    
    this.winGridViewPager1.AddColumnAlias("MapNo", "图号");    
    this.winGridViewPager1.AddColumnAlias("Specification", "规格型号");    
    this.winGridViewPager1.AddColumnAlias("Material", "材质");    
    this.winGridViewPager1.AddColumnAlias("ItemBigType", "备件属类");    
    this.winGridViewPager1.AddColumnAlias("ItemType", "备件类别");    
    this.winGridViewPager1.AddColumnAlias("Unit", "单位");    
    this.winGridViewPager1.AddColumnAlias("Price", "单价");    
    this.winGridViewPager1.AddColumnAlias("Source", "来源");    
    this.winGridViewPager1.AddColumnAlias("StoragePos", "库位");    
    this.winGridViewPager1.AddColumnAlias("UsagePos", "使用位置");    
    this.winGridViewPager1.AddColumnAlias("StockQuantity", "当前库存");    
    this.winGridViewPager1.AddColumnAlias("WareHouse", "所属库房");    
    this.winGridViewPager1.AddColumnAlias("Dept", "所属部门");    
    this.winGridViewPager1.AddColumnAlias("Note", "备注");   
  
    #endregion    
   
    string where = GetConditionSql();    
    List<ItemDetailInfo> list = BLLFactory<ItemDetail>.Instance.Find(where, this.winGridViewPager1.PagerInfo);    
    string tableColumns = "ID|int,ItemNo,ItemName,StockQuantity|int,Manufacture,MapNo,Specification,Material,ItemBigType,ItemType,
Unit,Price|decimal,Source,StoragePos,UsagePos,Note,WareHouse,Dept";    
    DataTable dt = DataTableHelper.CreateTable(tableColumns);    
    DataRow dr = null;    
    foreach (ItemDetailInfo info in list)    
    {    
        dr = dt.NewRow();    
        dr["ID"] = info.ID;    
        dr["ItemBigType"] = info.ItemBigType;    
        dr["ItemName"] = info.ItemName;    
        dr["ItemNo"] = info.ItemNo;    
        dr["ItemType"] = info.ItemType;    
        dr["Manufacture"] = info.Manufacture;    
        dr["MapNo"] = info.MapNo;    
        dr["Material"] = info.Material;    
        dr["Note"] = info.Note;    
        dr["Price"] = info.Price;    
        dr["Source"] = info.Source;    
        dr["Specification"] = info.Specification;    
        dr["StoragePos"] = info.StoragePos;    
        dr["Unit"] = info.Unit;    
        dr["UsagePos"] = info.UsagePos;    
        dr["WareHouse"] = info.WareHouse;    
        dr["Dept"] = info.Dept;    
   
        StockInfo stockInfo = BLLFactory<Stock>.Instance.FindByItemNo(info.ItemNo);    
        int quantity = 0;    
        if (stockInfo != null)    
        {    
            quantity = stockInfo.StockQuantity;    
        }    
        dr["StockQuantity"] = quantity;    
        dt.Rows.Add(dr);    
    }    
   
    this.winGridViewPager1.DataSource = dt.DefaultView;//new WHC.Pager.WinControl.SortableBindingList<ItemDetailInfo>(list);    
    this.winGridViewPager1.PrintTitle = Portal.gc.gAppUnit + " -- " + "备件信息报表";    
}

下面提供相关分页控件的下载地址:

1、传统界面的的Winform分页控件:http://files.cnblogs.com/wuhuacong/WHC.Pager.WinControl.zip  

2、Dotnetbar界面效果的Winform分页控件:http://files.cnblogs.com/wuhuacong/WHC.Pager.WinControlEx.zip   

WInform分页控件的CHM格式帮助文档:http://files.cnblogs.com/wuhuacong/WinformPagerHelp.rar 

本文转自博客园伍华聪的博客,原文链接:Winform分页控件使用详细介绍,如需转载请自行联系原博主。

时间: 2024-11-03 14:02:17

Winform分页控件使用详细介绍的相关文章

Winform分页控件最新版本发布,并提供基于DotNetBar界面的版本

该Winform分页控件很早就开发了,一直在我所有的共享软件项目中使用,并得到很多Winform开发者的热爱和支持,其中逐步完善了一些功能及优化.从较早时期的随笔<WinForm界面开发之"分页控件">中的评论可见该控件是大家在Winform开发中常用到的一个控件.本文主要介绍该分页控件的重要特性,并发布相关最新的版本供用户下载,该控件提供免费版本供大家使用,如果要正式使用到产品中,可以和我联系获得正式授权. 在Winform程序开发中,分页是永恒的话题,因为需要显示的数据

Winform分页控件重大更新,并实现普通版、DotNetBar、DevExpress三大版本整合更新(附各种例子源码)

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

asp.net中支持表头全选操作Winform分页控件

Winform分页控件,在很多场合都需要用到,由于整合较多的功能操作,使用起来效果更好,界面统一性也比较一致.其中的勾选操作,在有些场合下,也是比较有用的,因此提供该功能的整合. 我们先来看看基于我的分页控件实现的表头全选功能,界面效果如何. 1)传统界面的效果   2)DotNetBar界面效果   3)DevExpress界面效果    以上就是.NET开发中非常广泛应用的三组界面效果,分页控件分别提供了3种控件实现,几乎所有的属性及操作方法均一致,本实例中实现表头操作也是完全一致的,我们以

Winform分页控件之纯分页显示处理

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

Winform分页控件支持表头全选操作实现之最优方法

在我之前的文章<Winform分页控件支持表头全选操作实现>中,有介绍过一种方法来实现DataGridView的表头全选操作,不过这种方式,是通过绑定字段的方式实现,每次需要创建一个字段来专门做这个列头绑定,显得有点多余.那有没有更好的方式呢,当然有,我这里介绍一种更好表头全选实现的方式,然后说明我的分页控件封装后是如何简单实现这种效果的. 1)传统的DataGridView全选实现效果. 抛开我的分页控件来讲,实现传统的DataGridView的表头全选的方式,只需要引入一个类Datagri

Winform分页控件支持表头全选操作实现

前面介绍了一篇<Winform传统DataGridView和DevExpress控件的GridControl两者表头全选功能的实现(源码提供)>,介绍了传统DataGridView和DevExpress控件的GridView的表头全选功能实现,现把功能应用在我的Winform分页控件上,只需要很少的代码即可实现,代码更加简洁优雅. Winform分页控件,在很多场合都需要用到,由于整合较多的功能操作,使用起来效果更好,界面统一性也比较一致.其中的勾选操作,在有些场合下,也是比较有用的,因此提供

winform分页控件 附源码下载_C#教程

以前都是从事B/S开发,由于公司有个比较大的C/S项目,在使用DATAGRIDVIEW的时候,显示数据量比较大,所以才用分页模式,也不知道这样是否正确.  想找个C/S下面的分页控件,都没有什么好的,就自己跟B/S下的分页控件,修改成WINFORM下面的.  首先创建一个用户控件名称为pager,在控件中拖入bindingNavigator和bindingSource,修改bindingNavigator,加入必要的一些控件.  效果如下: 代码实现如下: namespace WindowsAp

Winform分页控件更新之集成Sqlite数据库分页

在Winform开发中,一直离不开分页处理,好的分页控件封装,能为开发节省很多时间和繁琐工作,对分页控件一直的改进和完善,也是我的兴趣之一.分页控件一直都有一些小的更新,不过基本上已能满足大多数的使用场景了.有一天,一个朋友告诉我:我们项目用的是Sqlite数据库做项目,这个分页控件能支持实现分页吗?由于分页控件虽然不直接访问数据,不过需要根据不同的数据库来构造不同的分页语句,因为之前听说过但没怎么研究过Sqlite数据库,当然也没有提供支持了. 既然朋友需要,那就得研究下,并提供相关的支持,经

【自然框架】QuickPager分页控件的总体介绍和在线演示

   QuickPager分页控件的特点    两种运行方式:自动运行.手动运行.前者便捷,后者灵活.  多种分页方式:Postback.Postback伪URL.URL.URL重写.Ajax For服务器控件伪URL.  多种分页算法:Max.颠倒Top(优化版).Row_Number.自动适应等.可以应对多种数据库和各种需求.  支持多种数据显示控件:GridView.DataList.Repeater等控件.有DataSource和DataBind()的控件都支持.  不需要存储过程,但是