WinForm一行代码实现分页

    开发人员工具 ImbaQ 1666次浏览 0个评论

    以往的winform程序表格加载数据大多是topXXX,然后用更详细的检索条件查询数据的,一直没用到分页。

    最近一个项目客户指定要分页显示,于是开始各种百度,分页控件的原理都差不多,关键就在于如何获取分页的数据源。主流的两种方式一是sql语句、二是存储过程。

    存储过程我表示至今还没用过,那一篇篇的代码看着就感人,而sql语句也挺复杂的,套了两三层的top,要是项目重写的话这么多分页sql也是够了。

    可见那些个分页控件都是骗人的,最多就是个“翻页按钮”,就不能把分页都在控件实现吗?我决定折腾一番:

    先设计了控件UI,比较常见的布局:

    WinForm一行代码实现分页

    然后我想的实现方式是把数据源(未分页的)直接传个该分页控件,然后由控件获取分页的数据源在赋给datagridview。

    主要用到的代码:

    /// <summary>
    /// dt分页获取数据源,返回分页后新的dt
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="pageIndex"></param>
    /// <param name="pageSize"></param>
    /// <returns></returns>
    private DataTable SplitDt(DataTable dt, int pageIndex, int pageSize)
    {
    DataTable newdt = dt.Clone();
    int rowbegin = (pageIndex - 1) * pageSize;
    int rowend = pageIndex * pageSize;
    
    if (rowend > dt.Rows.Count)
    rowend = dt.Rows.Count;
    for (int i = rowbegin; i < rowend; i++)
    {
    DataRow newdr = newdt.NewRow();
    DataRow dr = dt.Rows[i];
    foreach (DataColumn column in dt.Columns)
    {
    newdr[column.ColumnName] = dr[column.ColumnName];
    }
    newdt.Rows.Add(newdr);
    }
    return newdt;
    }
    

     

    /// <summary>
    /// 翻页方法,指定到页码
    /// </summary>
    /// <param name="pageIndex"></param>
    private void SetDataSource(int pageIndex)
    {
    //防止超过翻页范围
    if (pageIndex <= 1 && PageIndex == 1)
    { }//首页,最多只能翻到第一页
    else if (pageIndex >= PageCount && PageIndex == PageCount)
    { }//尾页
    else
    {
    PageIndex = pageIndex;
    DataGridViewClient.DataSource = SplitDt(dtSource, PageIndex, PageSize);
    }
    //界面显示内容
    lbMsg.Text = string.Format("共 {0} 条记录 / 第 {1} 页 / 共 {2} 页", DataCount, PageIndex, PageCount);
    txtGoto.Text = PageIndex.ToString();
    }
    

    这样基本实现了全自动的分页过程,暂时满足项目需要了,可能对于表格另加了操作列的情况还有一些问题,这个以后遇到了在更新吧。

    来看调用方法:

    dataGridView1.DataSource = MakeDt();
    easyDgvPager1.BindPager(dataGridView1, 25);//添加这一行代码即可实现分页
    

    看看效果:

    WinForm一行代码实现分页


    iHomeSoft, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明!
    WinForm一行代码实现分页