winform 的分页问题

看了很多分页,都是基于处理数据库sql语句的操作,在这里,我写了一个基于datatable的分页,有兴趣的朋友可以封装,用于listview 和gridview的分页。

       

       //分页
        int totalcount = 0;//记录总共的记录数
        static int page = 0; //记录现在翻到第几页了
        static int allpage = 0;//总共分页数
        static int mpage = 20;//每页多少数据
        private DataTable SJ;
        private DataTable paSJ;
        //分页结束

 

 

 //自写分页操作
        private DataTable FenYe(DataTable rdt)
        {
            nextPage.Enabled = true; //有调用数据处理
            prevPage.Enabled = true;//有调用数据处理
            int ycount = 0; //页数
            int count = rdt.Rows.Count;//查询表中有几条数据
            if (count > 0) //有数据才检查分页
            {
                ycount = count / mpage;
                if (ycount < 1) //小于1页,不进行分页
                {
                    ycount = 0;
                    page = 1;
                    allpage = 1;//总页面1
                    tbnowpage.Text = page.ToString();
                    tballpage.Text = allpage.ToString();
                    paSJ = rdt;
                    nextPage.Enabled = false;
                    prevPage.Enabled = false;
                    return paSJ; //直接返回原数据出去


                }
                else
                {
                    if (count % mpage == 0)  //余数为0时,就是被整除
                    {
                        allpage = ycount;//总页数
                    }
                    else
                    {
                        allpage = ycount + 1;//总页数
                    }
                    page = 1;
                    tbnowpage.Text = page.ToString();
                    tballpage.Text = allpage.ToString();
                    paSJ = rdt.AsEnumerable().Take(mpage).CopyToDataTable<DataRow>(); //刚开始,返回数据

                }
            }
            else
            {
                paSJ = rdt;
            }
            return paSJ;
        }

        private void nextPage_Click(object sender, EventArgs e)
        {

            prevPage.Enabled = true; //

            int j = page * mpage; //初始 例如1*2=2
            paSJ.Rows.Clear();//清空之前数据
            page = page + 1;
            tbnowpage.Text = page.ToString();
            tballpage.Text = allpage.ToString();
            int k;
            if (page == allpage)
            {
                nextPage.Enabled = false;
                k = SJ.Rows.Count;

            }
            else
            {
                k = page * mpage;
            }
            for (int i = j; i < k; i++)
            {

                paSJ.Rows.Add(SJ.Rows[i].ItemArray);
            }
         


            //绑定LISTVIEW
            gridviewdb(paSJ); //每次获取的数据
        }

        private void prevPage_Click(object sender, EventArgs e)
        {

            nextPage.Enabled = true;

            paSJ.Rows.Clear();//清空之前数据
            page = page - 1;
            int j = (page - 1) * mpage;
            tbnowpage.Text = page.ToString();
            tballpage.Text = allpage.ToString();
            for (int i = j; i < page * mpage; i++)
            {
                paSJ.Rows.Add(SJ.Rows[i].ItemArray);
            }

           

            if (page == 1)
            {
                prevPage.Enabled = false; //
            }
            //绑定LISTVIEW
            gridviewdb(paSJ); //每次获取的数据
        }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值