C#中DGV分页功能

完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsDGVFenYe
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //源数据
        private DataTable dt_sourceData;
        //当前页码
        private int m_currentPage;
        //总页数
        private int ZongYeShu;
        //每页显示的项数
        private int m_itemsPerPage;
        //总项数
        private int ZongXiangShu;
        //状态
        private enum PageState
        {
            Init = 0,
            Pre = -1,
            Next = 1
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitData();//初始化
            GetData();//获取数据
        }

        #region  初始化
        private void InitData()
        {
            dt_sourceData = null;
            m_currentPage = 1;//当前页数
            m_itemsPerPage = 10;//每页总项数
            ZongXiangShu = 0;
            ZongYeShu = 0;
        }
        #endregion

        #region 刷新数据
        private void GetData()
        {
            string strCon = "server=.;database=HSPB;uid=sa;pwd=123;";
            SqlConnection Conn = new SqlConnection(strCon);
            Conn.Open();
            string strSql = "SELECT XingMing, XingBie, XueXing, ChuShengNianYue FROM XiTong_YuanGongXinXi";

            SqlCommand cmd = new SqlCommand(strSql, Conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            //SqlDataAdapter da = new SqlDataAdapter(strSql, Conn);//定义dataadapter

            DataSet ds = new DataSet();
            da.Fill(ds);
            //dataGridView1.DataSource = ds.Tables[0];
            SetSourceData(ds.Tables[0]);
        }

        #endregion

        //设置数据源
        public void SetSourceData(object sourceData)
        {
            dt_sourceData = (DataTable)sourceData;
            //////获取总项数
            ZongXiangShu = dt_sourceData.Rows.Count;
            //////总页数
            ZongYeShu = (ZongXiangShu / m_itemsPerPage) + ((ZongXiangShu % m_itemsPerPage != 0) ? 1 : 0);//总页数
            UpdateUIData(PageState.Init);
        }

        //更新界面信息
        private void UpdateUIData(PageState pageState)
        {
            SetDGVSourceData(pageState);//初始化数据
            m_currentPage += (int)pageState;
            UpdateButtonState(); //更新按钮状态
            SetCurrOfTotalPage();//设置[当前页/总页码]
        }

        //设置DGV的数据源<显示数据>
        private void SetDGVSourceData(PageState pageState)
        {
            DataTable viewData = dt_sourceData.Clone();//复制组织架构
            int nBeginIndex = 0; int nEndIndex = 0;
            GetCurrentPageIndex(pageState, out nBeginIndex, out nEndIndex);
            for (; nBeginIndex < nEndIndex; nBeginIndex++)
            {
                viewData.ImportRow(dt_sourceData.Rows[nBeginIndex]);
            }

            dataGridView1.DataSource = viewData;
        }

        //设置当前页码/总页码
        private void SetCurrOfTotalPage()
        {
            label1.Text = m_currentPage.ToString() + " / " + ZongYeShu.ToString() + " 页";
        }

        //获取当前页码项的最小下标和最大下标
        private void GetCurrentPageIndex(PageState pageState, out int beginIndex, out int endIndex)
        {
            if (PageState.Init == pageState)//初始化
            {
                beginIndex = 0;
                endIndex = m_itemsPerPage;
            }
            else if (PageState.Pre == pageState)//上一页
            {
                endIndex = m_currentPage * m_itemsPerPage;
                beginIndex = (m_currentPage - 1) * m_itemsPerPage;
            }
            else//下一页
            {
                beginIndex = m_currentPage * m_itemsPerPage;
                endIndex = (m_currentPage + 1) * m_itemsPerPage;
            }
            //处理越界情况
            if (beginIndex < 0)
            {
                beginIndex = 0;
            }
            if (endIndex > ZongXiangShu)
            {
                endIndex = ZongXiangShu;
            }
        }

        //上一页按钮
        private void TSB_PrePage_Click(object sender, EventArgs e)
        {
            UpdateUIData(PageState.Pre);
        }

        //下一页按钮
        private void TSB_NextPage_Click(object sender, EventArgs e)
        {
            UpdateUIData(PageState.Next);
        }

        //更新按钮状态
        private void UpdateButtonState()
        {
            //处理上一页按钮
            if (1 == m_currentPage)
            {
                if (TSB_PrePage.Enabled)//屏蔽
                {
                    TSB_PrePage.Enabled = false;
                }
            }
            else if (!TSB_PrePage.Enabled)
            {
                TSB_PrePage.Enabled = true;
            }
            //处理下一页按钮
            if (ZongYeShu == m_currentPage)
            {
                if (TSB_NextPage.Enabled)
                {
                    TSB_NextPage.Enabled = false;
                }
            }
            else if (!TSB_NextPage.Enabled)
            {
                TSB_NextPage.Enabled = true;
            }
        }
    }
}
时间: 2024-10-20 16:04:04

C#中DGV分页功能的相关文章

django中orm分页功能(内置分页)

分批获取数据的方法 数据库方法 models.Uinfo.objects.all()[10:20] django自带的方法 创建一个新的url urlpatterns = [ url(r'^index.html/', views.index), ] 创建index函数 def index(request): """ 分页功能 :param request: :return: """ user_list = models.Uinfo.objects

Yii2.0实用功能技巧解密之——分页功能

Yii中的分页功能主要由yii\web: Linkable接口.yii\widgets: LinkPager类和yii\data: Pagination类三个组成. yii\data: Pagination 主要功能是对分页中的参数进行设置,如当前页.每页大小.总页数,总记录数等. yii\widgets: LinkPager 主要是根据yii\data: Pagination类所提供的参数生成前台页面的分页html代码. 使用:先在action里面生成分页对象,然后在前台的LinkPager中

MVC5 Entity Framework学习之添加排序、筛选和分页功能

前一篇文章中实现了对Student 实体的的基本CRUD操作,在这篇文章中将演示如何为Students Index页面添加排序.筛选和分页的功能. 下面是当完成排序.筛选和分页功能后的截图,你可以点击列标题来进行排序. 1.为 Students Index页面添加列排序链接 要为Students Index页面添加排序功能,你需要修改Student controller的Index方法,并为Student Index视图添加代码. 向Index方法添加排序功能 打开Controllers\Stu

SpringData分页功能

在SpringData中实现分页功能我们需要将接口实现PagingAndSortingRepository这个接口提供了分页查询的方法 Page<T> findAll(Pageable pageable); //分页查询(含排序功能) @Test public void Pagination() { int pageIndex = 1;// 前台传过来的当前页 int pageSize = 5;// 每页需要的记录数 /** * 不带排序写法: Pageable pageable = new

【APS.NET Core】- Razor Page 使用jqgrid实现分页功能

本文将使用jqgrid在Razor Page中实现分页功能. 前台 List.cshtml代码如下: 1 @page 2 @model ListModel 3 @{ 4 Layout = "~/Pages/Shared/_Index.cshtml"; 5 } 6 7 <script> 8 $(function () { 9 gridList(); 10 }); 11 12 function gridList() { 13 var $gridList = $("#g

创建有输出参数的存储过程并在c#中实现DataGridView分页功能

不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure usp_getPage1 go create procedure usp_getPage1--存储过程名称 @count int output,--输出参数 @countIndex int=1,--参数带默认值 @countPage int=5--参数带默认值 as --一个sql语句.ROW_N

ASP.NET中利用DataGrid的自定义分页功能

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍一下我在项目中用到的分页

winform中DataGridView实现分页功能

http://liyaguang20111105.blog.163.com/blog/static/19929420220146283255809/ 在winform的设计中,要实现对DataGridView控件的分页功能,需要两个控件:BindingSource.BindingNavigator,根据需求可对BindingNavigator进行自由的扩展,下图的示例则是根据一般需求对分页功能的实现.红色区域是对BindingNavigator控件扩展后的效果. 具体实现过程 : //窗体构造方

sf中标准的分页功能介绍

世上本无事,庸人自扰之.我喜欢一个相对比较安静的环境去学习和工作,希望在一个掉一根针的声音都能够听到的环境中,但是有时候往往相反,一片嘈杂,我改变不了周围的环境,只能改变自己,其实这些都没有什么,也许是我内心就很嘈杂,使我听到一点点声音就感觉很烦躁.上善若水,心静则情静继而人静. 言归正传: sf中标准的分页功能: sf有自己标准的分页功能,sf真是个功能相当完善的云端开发平台,其有好多自己标准的功能,今天我就根据自己的理解先介绍一下sf标准的分页功能的皮毛. 定义关联到前台的Contet值 p