C#dataGridView分页设置

先看效果图

这个是用lalbe标签和button按钮制作的

具体看代码设置

 /// <summary>
        /// 获取数据源 (表名,条件)
        /// </summary>
        /// <param name="sql"></param>
        private void GetDataSource(string name, string sql)
        {
            this.dataGridView1.Columns.Clear(); //清除所有列
            if (name.Equals("hou_chuCaidan"))
            {
                Cai_lie(); //菜品记录的列
            }
            else
            {
                System_lie();//系统记录的列
            }
            sb.Length = 0;
            sb.AppendFormat("select * from {1} {0} ", sql, name);
            //设置数据源
            _dt = dbhelper.GetTable(sb.ToString(), "_jilu");

            //设置序号
            for (int i = 0; i < _dt.Rows.Count; i++)
            {
                _dt.Rows[i][0] = i + 1;
            }

            //初始页数为1
            num = 1; 
            FenYe(-1);
            
        }

        //声明变量
        int ii = 18;  //每页的行数
        int rows;     //总行数
        int num;      //开始页数
        int sum;      //总页数
        DataTable _dt; //数据源

        /// <summary>
        /// 分页数据设置
        /// 
        /// 实现思路:在源数据中截取选择的行数进行展示,截取的行数根据页数进行获取
        ///          再把获取到行复制到一个新的Table中,再设置数据源
        /// 
        /// 如果oo的值不为-1, 开始页数则为oo
        /// </summary>
        /// <param name="oo"></param>
        private void FenYe(int oo)
        {
           if( oo != -1)
           {
               num = oo;
           }
            DataTable dt = _dt.Clone(); //复制原数据的结构
            
            rows = _dt.Rows.Count; //总行数
            sum = rows%ii == 0 ? rows/ii : (rows/ii)+1; //总页数=总行数/每页的行数(如果除不尽则+1)

            int ks = (num * ii) - ii; //开始行数(当前页数*每页的行数)-每页的行数
            int js = num * ii; //结束行数
            if (num == sum)
            {
                js = ks + (rows - ((num-1) * ii)); //当最后一页时,结束的行数 = 开始行数 + (总行数 - ((总页数-1) * 每页的行数))
            }
             //实现分页
             if( rows != 0) //必须要有一条记录
             {
                 for (int i = ks; i < js; i ++ ) 
                 {
                     dt.ImportRow(_dt.Rows[i]); //复制行
                 }
             }
            this.lal_Rows.Text = rows.ToString(); //设置总行数
            this.lal_num.Text = num.ToString();   //当前页数
            this.lal_sum.Text = sum.ToString();   //总页数

            //给DateGridView设置数据源
            this.dataGridView1.DataSource = dt;

        }

        private void btn_shou_Click(object sender, EventArgs e) //首页
        {
            num = 1; //当前页数设为1
            FenYe(-1);
        }

        private void btn_shang_Click(object sender, EventArgs e) //上一页
        {
            if (num == 1) //如果当前页数为1的话直接跳出
            {
                return;
            }
            num--;
            FenYe(-1);
        }

        private void btn_xia_Click(object sender, EventArgs e) //下一页
        {
            if (num == sum) //最后一页时直接跳出
            {
                return;
            }
            num++;
            FenYe(-1);
        }

        private void btn_wei_Click(object sender, EventArgs e) //尾页
        {
            num = sum; //当前页数设为总页数
            FenYe(-1);
        }

        private void btn_go_Click(object sender, EventArgs e) //GO跳转
        {
            try { int i = Convert.ToInt32(this.txt_ye.Text); }
            catch (Exception) { return; }
            if (this.txt_ye.Text.Equals(string.Empty) || 
                Convert.ToInt32(this.txt_ye.Text) < 1 || Convert.ToInt32(this.txt_ye.Text) > sum) return;

            FenYe(Convert.ToInt32(this.txt_ye.Text)); 
        }

 实现思路:获取在数据中获取数据源后,再根据页数进行分页展示数据,比如一页有10行数据,现在是第2页,那么就把数据源中的第10行至19行的数据单独拿出来进行展示

注:要注意最后一页的设置!!!

猜你喜欢

转载自blog.csdn.net/qq_42766492/article/details/81990438
今日推荐