当前位置:编程学习 > C#/ASP.NET >>

winform datagridview分页

datagridview可不可以跟app手机列表分页一样 鼠标划到底层就分页显示 --------------------编程问答-------------------- 我做的时候是自己设定50行之后开始分页,一页50行。那样挺简单的 --------------------编程问答-------------------- 比如设定每次显示10条,每次根据选出的最大的id作为条件去选择下一组,其实你要做的是sql的分页技术,滚动到最后一条后,要选取下一页 --------------------编程问答-------------------- 问题是滚动到最底层获取不到最后一条  怎么获取滚动到最底层跟最后一条数据匹配?? --------------------编程问答-------------------- 你可以获取dgv.rows.count --------------------编程问答-------------------- 对于这个问题我们可以通过代码来实现分页
测试代码如下

public partial class Form1 : Form
    {
        private DataTable dataSource = new DataTable();     //所有数据
        private DataTable displayTable = new DataTable();   //当前页数据
        private int pageSize = 5;                           //页容量
        private int curPageIndex = 0;                       //当前页索引
        private int totalPage = 0;                          //总页数
        private int totalRow = 0;                           //总数据记录

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //初始化表结构
            InitDataTable(this.dataSource);
            InitDataTable(this.displayTable);

            //获取所有的数据填充到dataSource
            GetData(this.dataSource);

            //重置页相关信息
            ResetFieldData(false);
            //根据页相关设置当前显示的数据
            FillDisplayTable();
            this.dataGridView1.DataSource = this.displayTable;
        }

        #region 数据处理

        /// <summary>
        /// 获取数据
        /// </summary>
        /// <returns></returns>
        private void GetData(DataTable dt)
        {
            for (int i = 0; i < 23; i++)
            {
                DataRow dr = dt.NewRow();
                dr["PName"] = "Name" + i;
                dr["PCode"] = i.ToString().PadLeft(4, '0');
                dr["PAge"] = 20 + i;
                dt.Rows.Add(dr);
            }
        }

        /// <summary>
        /// 初始化表
        /// </summary>
        /// <param name="dt"></param>
        private void InitDataTable(DataTable dt)
        {
            dt.Columns.Add(new DataColumn("PName", typeof(string)));
            dt.Columns.Add(new DataColumn("PCode", typeof(string)));
            dt.Columns.Add(new DataColumn("PAge", typeof(int)));
        }

        #endregion

        #region 当前页数据显示

        /// <summary>
        /// 数据展示
        /// </summary>
        private void FillDisplayTable()
        {
            this.displayTable.Clear();
            if (totalRow <= 0)
            {
                DisplayInfo();
                return;
            }

            if (totalRow % pageSize == 0)
            {
                FillData(true, 0);
            }
            else
            {
                int lastPageRows = totalRow % pageSize;
                if (curPageIndex < totalPage - 1)
                    FillData(true, 0);
                else
                    FillData(false, lastPageRows);

            }

            DisplayInfo();
        }

        /// <summary>
        /// 设置当前Grid显示数据
        /// </summary>
        private void FillData(bool flag, int lastPageRows)
        {
            int temp = 0;
            if (flag)
                temp = pageSize;
            else
                temp = lastPageRows;

            for (int index = curPageIndex * pageSize; index < curPageIndex * pageSize + temp && curPageIndex < totalPage; index++)
            {
                DataRow dr = displayTable.NewRow();

                dr["PName"] = dataSource.Rows[index]["PName"];
                dr["PCode"] = dataSource.Rows[index]["PCode"];
                dr["PAge"] = dataSource.Rows[index]["PAge"];

                displayTable.Rows.Add(dr);
            }
        }

        /// <summary>
        /// 重置页相关信息
        /// </summary>
        /// <param name="isUpdate">是否为删除或增加了数据源dataSource,这样会修改curPageIndex</param>
        private void ResetFieldData(bool isUpdate)
        {
            if (this.dataSource.Rows.Count == 0)
            {
                this.totalPage = 0;
                this.totalRow = 0;
                this.curPageIndex = 0;

                return;
            }

            if (this.dataSource.Rows.Count % pageSize == 0)
            {
                this.totalPage = this.dataSource.Rows.Count / pageSize;
                this.totalRow = this.dataSource.Rows.Count;
            }
            else
            {
                this.totalPage = this.dataSource.Rows.Count / pageSize + 1;
                this.totalRow = this.dataSource.Rows.Count;
            }

            if (isUpdate)
                this.curPageIndex = this.totalPage - 1;
        }

        /// <summary>
        /// 显示页和相关信息
        /// </summary>
        private void DisplayInfo()
        {
            this.lkl_DisplayInfo.Text = string.Format("共{0}页,{1}项|第{2}页", this.totalPage, this.totalRow, this.curPageIndex + 1);
        }

        #endregion

        #region 翻页处理

        private void btn_FirstPage_Click(object sender, EventArgs e)
        {
            if (this.curPageIndex == 0)
                return;

            this.curPageIndex = 0;
            FillDisplayTable();
            DisplayInfo();
        }

        private void btn_PrePage_Click(object sender, EventArgs e)
        {
            if (this.curPageIndex == 0)
                return;

            this.curPageIndex -= 1;
            FillDisplayTable();
            DisplayInfo();
        }

        private void btn_NestPage_Click(object sender, EventArgs e)
        {
            if (this.curPageIndex == totalPage - 1 || this.totalPage <= 0)
                return;

            this.curPageIndex += 1;
            FillDisplayTable();
            DisplayInfo();
        }

        private void btn_LastPage_Click(object sender, EventArgs e)
        {
            if (this.curPageIndex == totalPage - 1 || this.totalPage <= 0)
                return;

            this.curPageIndex = totalPage - 1;
            FillDisplayTable();
            DisplayInfo();
        }

        #endregion
}
--------------------编程问答-------------------- 效果如下图


补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,