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();
            }
        }
    }
}
时间: 2024-11-02 13:10:30

C#DataGridView实现分页显示的相关文章

求教:C# winform 访问access数据库 分页显示于datagridview问题

问题描述 各位达人,想请教一个问题:我在C#winform中用dataGridView显示access数据库中的查询信息,想实现分页显示,但查了都是全部得到数据后再进行分页显示的,但这样如果数据多的话就很麻烦了,不知道能否实现取数据时进行分页读数据呢?诸位烦请不吝赐教,感谢---------- 解决方案 解决方案二:http://tech.163.com/05/1027/19/213IN7MC0009159F.htmlhttp://www.7880.com/Info/Article-3e9741

DataGridView怎样实现把数据按组分页显示 (在线等,急)

问题描述 1.DataGridView怎样实现把数据按组分页显示显示效果如下 2.如何用鼠标滚动键实现翻页 GroupNameNameValue这是第一页A1xxxxxxxbbbbbbbcccccccGroupNameNameValue这是第二页B1xxxxxxxbbbbbbbccccccc 解决方案 解决方案二:DataGridView显示的数据已经是分组了的如何用鼠标滚动键实现翻页这个...解决方案三:请高手帮忙

关于DataGridView的分页和ComBobox绑定!

问题描述 我已经从服务器端返一个查询所有的Dataset对象~~而我现在想要在客服端设置datagridview成分页~该怎么写呢?还有个问题,用comBobox和Datagridview的绑定..即要实现,comBobox选择DataGridview里面显示数据表的其中一个字段值的,datagridview里面相应的显示只包含ComBoBox选择的字段值的行数! 解决方案 解决方案二:希望大家帮忙啊~~在线等~解决方案三:返回前實現分頁:在后台查詢,如SQL中來完成,只需要查找想要顯示的記錄c

Winform分页控件之纯分页显示处理

在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情况,不过有时候需要更进一步对列表控件进行设置修改或者实现一些特殊的显示效果的时候,这种绑定列表控件的分页控件方式就有点捉襟见肘了.为了解决这个问题,我对分页控件进行稍微的调整,使其支持分页和列表控件分开的情况,具体实现以及效果是如何的呢,下面我们来分析了解下. 1.单独的分页信息控件 在我的开发设计

使用 xsl 对 xml 文档进行动态排序,分页显示的扩展

xml|动态|分页|排序|显示 在 http://www.asptoday.com/articles/20000724.htm 有非常好的例子,是关于   使用 xsl 对 xml 文档进行动态排序,分页显示的.   主要使用三个文件:   default.asp 把 xml, xsl 文件串起来   getxml.asp 对 default 来说相当于 xml   sample.xsl 主要的格式编排工作在这里做   ======================================

用PHP和SQL Sever实现分页显示

分页|显示 我们在浏览网页时,经常看到分页显示的页面.如果想把大量数据提供给浏览者,分页显示是个非常实用的方法.在下面的文章中,我们将介绍如何用PHP和MS SQL Server实现对数据库中纪录的分页显示. 在本例中,我们用mssql_num_rows()函数得到当前查询的记录数,结合页面大小SgPageSize,得到当前记录集要显示的页面数,为分页显示打下了基础.mssql_data_seek()函数是分页显示的关键函数,该函数的第二个参数标示当前纪录的偏移量,根据这个偏移量就可以找到要显示

PHP应用分页显示制作详细讲解(1)

分页|显示 1.前言 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解.本文适合初学者阅读,所有示例代码均使用php编写. 2.原理 所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($

web开发中PHP+MySQL分页显示示例分析

mysql|web|分页|示例|显示     Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观.所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写. 一.分页程序的原理 分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page).有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql

ASP中实现分页显示的七种武器

分页|显示|分页     在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便.自由.而在Visual InterDev6.0(以下简称VI6.0)中,由于Script Object Model(以下简称SOM).Design-Time Control(以下简称DTC)以及Data Environment Object Model(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便.