Winform/Csharp中使用定时器+分页算法实现DataGridView自动分页显示(模拟大屏切换效果)

发布时间 2023-03-27 20:07:16作者: 霸道流氓

场景

Winform中DataGridView设置前景色、单元格背景色、标题栏样式、禁止改变高宽、不显示空白行、清除选中样式、填充数据源、设置标题、设置单列宽度:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129800532

在上面讲了设置DataGridView的样式设置

C#中实现计时器功能(定时任务和计时多长时间后执行某方法):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106274074

以及定时器的使用之后,怎么利用定时器实现DataGridView自动分页显示。

 

 

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、分页算法实现

        /// <summary>
        /// DataGridView 分页显示
        /// </summary>
        /// <param name="dataCount"></param>
        /// <returns>dataGridView 要显示的第一行的索引</returns>
        private int pagingDisplay(int dataCount) {
            pageCount = dataCount % pageSize > 0 ? dataCount / pageSize + 1 : dataCount / pageSize;
            int index = currentPage * pageSize;
            currentPage++;
            if (currentPage >= pageCount)
            {
                currentPage = 0;
            }
            return index;
        }

分页算法需要的参数有数据总条数dataCount作为参数进行传递、每页显示的条数pageSize、当前页数currentPage、

总页数pageCount。

注意这里的总页数要根据数据总条数与每页显示条数求余数是否大于0做判断。

这里用到的变量需要提前声明

        //数据总条数
        int dataCount = 0;
        //当前页
        int currentPage = 0;
        //每页显示的数量
        int pageSize = 5;
        //总页数
        int pageCount = 0;

另外index是dataGridView要从哪一条开始显示的索引下标。

2、定时器分页实现

                    //分页显示数据定时器
                    _timerOfDataGridView.Interval = scheduleIntervalOfDataGridView;
                    _timerOfDataGridView.Tick += _timer_Tick_DataGridView;
                    _timerOfDataGridView.Start();

定时器具体实现方法

        private void _timer_Tick_DataGridView(object sender, EventArgs e)
        {
            if (dataGridView1.RowCount > 0 && dataCount > 0) {
                //定时分页显示
                int index = pagingDisplay(dataCount);
                dataGridView1.FirstDisplayedScrollingRowIndex = index;
            }
        }

获取下标之后就可以通过

dataGridView1.FirstDisplayedScrollingRowIndex = index;

设置要显示的第一行的索引。

注意这里的dataCount 要在设置数据源时要对其进行赋值,然后在分页定时器执行前

要先进行判断,避免dataCount为0出错等。

                        if (results.Count>0) {
                            dataCount = results.Count;
                            //填充数据源
                            setDataGrivdViewData(results);
                            //设置标题
                            setDataGridViewHeader();
                            //设置宽度高度
                            setDataGridViewWidth();
                            setDataGridViewHeight();
                        }