DataTable 数据分页

 

此文是根据网上资料,加以自己的理解实现集合数据的分页,适合初学者学习,高手请指点!

代码如下:

  //测试 分页数据
          DataTable dtyhdd;
        public void Chushyhdd()
        {
            dtyhdd = new DataTable();
            dtyhdd.Columns.Add("ddno", typeof(string));
            dtyhdd.Columns.Add("dd", typeof(string));
        }

        //隐患地点共分多少页
        int yhddnumi = 0;
        //隐患当前页
        int yhdddqi = 0;
        //每页显示多少数据
        int PageSize = 10;


查询:

  private void button1_Click(object sender, EventArgs e)
        {
            //【初始化数据】
              Chushyhdd();
            comyhdd.Items.Clear();

            for (int i = 1; i <= 31; i++)
            {
                //保存到内存表中
                DataRow tr = this.dtyhdd.NewRow();

                tr["ddno"] = i.ToString();
                tr["dd"] = i.ToString()+"内容";
                dtyhdd.Rows.Add(tr);
            }


          //【执行分页显示】

            //每次显示10条数据 需要多少次
            yhddnumi = dtyhdd.Rows.Count / 10;
            //是否有余数
            int numys = dtyhdd.Rows.Count % 10;
            if (numys > 0)
            {
                yhddnumi++;
            }

            if (dtyhdd.Rows.Count >= PageSize)
            {               
            
            //第一次获取数据1到10 第一页
            for (int i = 0; i < PageSize; i++)
            {
                string sr1 = dtyhdd.Rows[i]["ddno"].ToString();
                string sr2 = dtyhdd.Rows[i]["dd"].ToString();

                comyhdd.Items.Add(sr2);
            }

            }
            else
            {
                //就一页显示全部数据
                foreach (DataRow tr in dtyhdd.Rows)
                {
                    string sr1 = tr["ddno"].ToString();
                    string sr2 = tr["dd"].ToString();

                    comyhdd.Items.Add(sr2);
                }
            }

            //上一页不可用
            button2.Enabled = false;
            //当前页
            yhdddqi = 1;
            //提示
            labfy.Text = yhdddqi.ToString() + "/" + yhddnumi;
        }


上一页:

 //上一页
        private void button2_Click(object sender, EventArgs e)
        {
            //下一页不起作用
            button3.Enabled = true;

            //当前页数是最后一页
            if (yhdddqi == 1)
            {
                //上一页不起作用
                button2.Enabled = false;
                return;
            }

            //清空显示数据
            comyhdd.Items.Clear();         

            yhdddqi--;

            DataTable dddds = GetPagedTable(dtyhdd, yhdddqi, PageSize);

            //测试
            int dsds = dddds.Rows.Count;
            //遍历数据
            foreach (DataRow tr in dddds.Rows)
            {

                string sr2 = tr["dd"].ToString();

                comyhdd.Items.Add(sr2);
            }
            //提示
            labfy.Text = yhdddqi.ToString() + "/" + yhddnumi;
        }


 

  //下一页
        private void button3_Click(object sender, EventArgs e)
        {
            button2.Enabled = true;  

            //当前页数是最后一页
            if (yhddnumi > yhdddqi)
            {
                //清空显示数据
                comyhdd.Items.Clear();

                yhdddqi++;

                DataTable dddds = GetPagedTable(dtyhdd, yhdddqi, PageSize);

                //测试
                int dsds = dddds.Rows.Count;
                //遍历数据
                foreach (DataRow tr in dddds.Rows)
                {

                    string sr2 = tr["dd"].ToString();

                    comyhdd.Items.Add(sr2);
                }
                //提示
                labfy.Text = yhdddqi.ToString() + "/" + yhddnumi;
            }
            else
            {
                //下一页不起作用
                button3.Enabled = false;               
            }
          
        }


下面这个方法是计算数据分页用的:

   /// 
        /// DataTable分页
        /// 
        /// DataTable
        /// 页索引,注意:从1开始
        /// 每页大小
        /// 
        public static DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize)
        {
            //判断当前索引
            if (PageIndex == 0)
                return dt;
            //从数据集合拷贝数据
            DataTable newdt = dt.Copy();
            //数据清空
            newdt.Clear();
            //开始数据索引 = 当前页-1 x 每页大小
            int rowbegin = (PageIndex - 1) * PageSize;
            //结束数据索引 = 当前页 x 每页大小
            int rowend = PageIndex * PageSize;
            //开始数据索引 大于等于 当前数据集合大小
            if (rowbegin >= dt.Rows.Count)
                return newdt;
            //结束数据索引 大于 当前数据集合大小
            if (rowend > dt.Rows.Count)
                rowend = dt.Rows.Count;
            //遍历数据
            for (int i = rowbegin; i <= rowend - 1; 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;
        }


效果图(很丑的界面 只是测试用)

 

你可能感兴趣的:(数据分页,C#,c#,分页,索引)