C#DataGridView实现分页显示

简介:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace dgvCategories
{
    public partial class Form1 : Form
    {
        int _iPageSize = 0;       //每页显示行数
        int _iTotalRecords = 0;    //总记录数
        int _iPageCount = 0;      //页数=总记录数/每页显示行数
        int _iPageCurrent = 0;    //当前页号
        int _iCurrent = 0;        //当前记录行
        DataSet _ds = new DataSet();
        DataTable _dtCategories = new DataTable();

        public Form1()
        {
            InitializeComponent();
        }

        private void InitDataSet()
        {
            _iPageSize = 20;  //每页显示20行
            _iTotalRecords = _dtCategories.Rows.Count; //表的总行数
            _iPageCount = _iTotalRecords / _iPageSize; //总页数

            if (_iTotalRecords % _iPageSize > 0) //如果不是整除,
            {
                _iPageCount++;//不满20行的也作为一页来显示
            }

            _iPageCurrent = 1;  //当前第1页
            _iCurrent = 0;      //当前第0行

            LoadData();
        }

        private void LoadData()
        {
            int iBeginPos = 0;   //当前页面开始记录行
            int iEndPos = 0;     //当前页面结束记录行

            DataTable dtTemp = _dtCategories.Clone();  //克隆表的结构

            if (_iPageCurrent == _iPageCount) //如果当前页是最后一页
            {
                iEndPos = _iTotalRecords;
            }
            else//当前页面结束位置=页面大小*当前页码
            {
                iEndPos = _iPageSize * _iPageCurrent;
            }

            iBeginPos = _iCurrent; //当前记录行号

            txtPageCount.Text = Convert.ToString(_iPageCount); //显示总页数
            txtCurentPage.Text = Convert.ToString(_iPageCurrent); //显示当前第一页

            //从元数据表复制数据
            for (int i = iBeginPos; i < iEndPos; i++ )
            {
                dtTemp.ImportRow(_dtCategories.Rows[i]);
                _iCurrent++;
            }

            dgvCategories.DataSource = bdsCategories;
            bdnCategories.BindingSource = bdsCategories;
            bdsCategories.DataSource = dtTemp;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string strConnectionString = "server=localhost;database=NorthWind;" +
                "uid=sa;pwd=tianshi520;";
            SqlConnection sqlConn = new SqlConnection(strConnectionString);
            sqlConn.Open();

            string strSql = "select * from orders";
            SqlDataAdapter sda = new SqlDataAdapter(strSql, sqlConn);

            sda.Fill(_ds, "Categories");
            _dtCategories = _ds.Tables["Categories"];
            sqlConn.Close();

            InitDataSet();
        }

        private void bdnCategories_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Text == "关闭")
            {
                this.Close();
            }
            else if (e.ClickedItem.Text == "下一页")
            {
                _iPageCurrent++;//页数加1
                if (_iPageCurrent > _iPageCount)//如果当前页码>最大页数
                {
                    MessageBox.Show("已经是最后一页,请点击“上一页”查看!");
                    return;
                }

                _iCurrent = _iPageSize * (_iPageCurrent - 1);//当前行号
                LoadData();
            }
            else if (e.ClickedItem.Text == "上一页")
            {
                _iPageCurrent--;
                if (_iPageCurrent <= 0)
                {
                    MessageBox.Show("当前已经是第一页,请点击下一页查看!");
                    return;
                }
                _iCurrent = _iPageSize * (_iPageCurrent - 1);
                LoadData();
            }
        }
    }
}

目录
相关文章
|
C# 数据库
C# DataGridView用法(—)代码绑定数据源
C# DataGridView用法(—)代码绑定数据源
510 1
|
10月前
|
存储 缓存 C#
46.c#:datagridview控件
46.c#:datagridview控件
126 1
|
10月前
|
SQL 数据库连接 数据库
C# | 将DataGridView中的数据保存到Accesss数据库
要将WinForm的DataGridView中的数据保存到Access数据库,可以按照本文的步骤进行。 在Visual Studio中,打开项目,右键单击“引用”文件夹,选择“添加引用”,在“COM”选项卡中找到并选中“Microsoft Office 14.0 Access Database Engine Object Library”,然后单击“确定”按钮。
388 0
C# | 将DataGridView中的数据保存到Accesss数据库
|
10月前
|
XML 存储 JSON
C# | DataGridView数据转存为Json、XML格式
DataGridView是常用的数据展示组件,而将其转存为Json或XML格式,则可以方便地进行数据的传输和存储。 Json格式具有轻量、易读、易解析等优点,广泛应用于Web开发、API接口传输等场景。 XML格式则具有良好的结构化特性,支持命名空间、数据类型等复杂数据表示方式,被广泛应用于数据交换、配置文件等领域。 因此,将DataGridView数据转存为Json、XML格式,不仅能够方便地进行数据的传输和存储,还能够满足不同场景下的数据需求。 本篇文章将介绍如何将DataGridView数据转存为Json、XML格式,并提供相应的代码示例。
264 0
C# | DataGridView数据转存为Json、XML格式
|
10月前
|
JSON C# 数据格式
C# | 使用DataGridView展示JSON数组
你想展示一个复杂的JSON数组数据吗?但是你却不知道该如何展示它,是吗?没问题,因为本文就是为解决这个问题而生的!使用DataGridView轻松地将JSON数组数据以表格的形式呈现出来,这样你就可以更加清晰地了解和处理数据了。 让我们一起来探索如何实现吧!
227 0
C# | 使用DataGridView展示JSON数组
|
10月前
|
XML JSON 数据处理
C# | 导出DataGridView中的数据到Excel、CSV、TXT
从DataGridView中导出数据到Excel、CSV、TXT是开发中非常常见的一种需求。本文将讲解如何高效的完成对这三种格式的单向导出。 倘若直接写三种格式的导出必定会产生大量的重复代码,而从表中获取结构化数据的思路是基本一致的,因此有一个思路是先将DataGridView中的数据转换为DataTable对象,再进一步导出成我们的目标格式。 本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。
711 0
C# | 导出DataGridView中的数据到Excel、CSV、TXT
|
C#
C#之四十三 从DataGridView导出数据到Excel
C#之四十三 从DataGridView导出数据到Excel
107 0
|
C# 数据库
C#中的DataGridView中添加按钮并操作数据
C#中的DataGridView中添加按钮并操作数据
364 0
|
C#
C# 两个DataGridView设置时间范围,开始日期小于结束日期
C# 两个DataGridView设置时间范围,开始日期小于结束日期
139 0
|
数据库 C#
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作