• C# Winform DataGridView分页功能的实现


    // 1、定义几个所需的公有成员:
    
      
    
            int pageSize = 0;     //每页显示行数
    
            int nMax = 0;         //总记录数
    
            int pageCount = 0;    //页数=总记录数/每页显示行数
    
            int pageCurrent = 0;   //当前页号
    
            int nCurrent = 0;      //当前记录行
    
            DataSet ds = new DataSet();
    
            DataTable dtInfo = new DataTable();
    
      
    
      //2、在窗体载入事件中,从数据源读取记录到DataTable中:
    
      
    
            string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL";   //数据库连接字符串
    
            SqlConnection conn = new SqlConnection(strConn);
    
            conn.Open();
    
            string strSql = "SELECT * FROM CUSTOMERS";
    
            SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
    
            sda.Fill(ds,"ds");
    
            conn.Close();
    
            dtInfo = ds.Tables[0];
    
            InitDataSet();
    
        
    
      //3、用当前页面数据填充DataGridView
    
      
    
            private void InitDataSet()
    
            {
    
                pageSize = 20;      //设置页面行数
    
                nMax = dtInfo.Rows.Count;
    
                pageCount=(nMax/pageSize);    //计算出总页数
    
                if ((nMax % pageSize) > 0) pageCount++;
    
                pageCurrent = 1;    //当前页数从1开始
    
                nCurrent = 0;       //当前记录数从0开始
    
                LoadData();
    
             }
    
      
    
            private void LoadData()
    
            {
    
                int nStartPos = 0;   //当前页面开始记录行
    
                int nEndPos = 0;     //当前页面结束记录行
    
                DataTable dtTemp = dtInfo.Clone();   //克隆DataTable结构框架
    
      
    
                if (pageCurrent == pageCount)
    
                {
    
                    nEndPos = nMax;
    
                }
    
                else
    
                {
    
                     nEndPos = pageSize * pageCurrent;
    
                }
    
      
    
                nStartPos = nCurrent;
    
                lblPageCount.Text = pageCount.ToString();
    
                txtCurrentPage.Text = Convert.ToString(pageCurrent);
    
        
    
      
    
                //从元数据源复制记录行
    
                for (int i = nStartPos; i < nEndPos; i++)
    
                {
    
                    dtTemp.ImportRow(dtInfo.Rows[i]);
    
                    nCurrent++;
    
                }
    
                bdsInfo.DataSource = dtTemp;
    
                bdnInfo.BindingSource = bdsInfo;
    
                dgvInfo.DataSource = bdsInfo;
    
           }
    
      
    
          //   4、菜单响应事件:
    
       
    
          private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    
          {
    
               if (e.ClickedItem.Text == "关闭")
    
                {
    
                   this.Close();
    
                }
    
               if (e.ClickedItem.Text == "上一页")
    
                {
    
                    pageCurrent--;
    
                    if (pageCurrent <= 0)
    
                    {
    
                       MessageBox.Show("已经是第一页,请点击“下一页”查看!");
    
                       return;
    
                    }
    
                    else
    
                    {
    
                       nCurrent = pageSize * (pageCurrent - 1);
    
                    }
    
                    LoadData();
    
                 }
    
                if (e.ClickedItem.Text == "下一页")
    
                {
    
                    pageCurrent++;
    
                    if (pageCurrent > pageCount)
    
                    {
    
                        MessageBox.Show("已经是最后一页,请点击“上一页”查看!");
    
                        return;
    
                     }
    
                     else
    
                    { 
    
                        nCurrent=pageSize*(pageCurrent-1);
    
                  }
    
                  LoadData();
    
               }
    
         }

    从界面可以看到,在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。
    在bdnInfo控件中添加几个用于选择页面的lable和botton,如图所示:

    屌丝一直很屌
  • 相关阅读:
    【SQL】含有NULL值的排序
    【SQL】结构化查询语言
    【Oracle】体系结构
    【PL/SQL】匿名块、存储过程、函数、触发器
    【Linux】VMware安装VMware Tools工具
    【SQL】INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND
    Tornado源码浅析
    【Python之路】特别篇--property()函数 和 @property 装饰符
    【Python之路】特别篇--生成器(constructor)、迭代器(iterator)、可迭代对象(iterable)
    【Python之路】特别篇--基于领域驱动模型架构设计的京东用户管理后台
  • 原文地址:https://www.cnblogs.com/xiashenbin/p/3710919.html
Copyright © 2020-2023  润新知