C#:Winfrom 实现DataGridView 自定义分页

简介: 今天给大家分享Winform实现DataGridView 自定义分页的案例,感兴趣的朋友可以一起来学习一下。采用技术:C\#+Winform+Dapper+SQLite。

image_d3d6cfd8.png

今天给大家分享Winform实现DataGridView 自定义分页的案例,感兴趣的朋友可以一起来学习一下。

采用技术:C\#+Winform+Dapper+SQLite。

本次为了避免安装数据库的繁琐,采用了SQLite数据库。

  1. 安装Dapper依赖

命令如下:

Install-Package Dapper -Version 1.40.0

image_2b8d828e.png

1、安装SQLite依赖

命令如下:

Install-Package System.Data.SQLite.Core -Version 1.0.116

image_51dfb73b.png

2、新建SQLite数据库文件

目前数据库文件放在bin/debug 目录下,文件名为user.db ,大家不需要在新建了。

新建表脚本

CREATE TABLE "user" (
  "Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  "UserName" TEXT NOT NULL,
  "Age" integer NOT NULL,
  "Address" TEXT NOT NULL,
  "Hobby" TEXT,
  UNIQUE ("Id" ASC)
);
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (1, '小明1', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (2, '小明2', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (3, '小明3', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (4, '小明4', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (5, '小明5', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (6, '小明6', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (7, '小明7', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (8, '小明8', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (9, '小明9', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (10, '小明10', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (11, '小明11', 35, '苏州', '读书');
INSERT INTO "main"."user" ("Id", "UserName", "Age", "Address", "Hobby") VALUES (12, '小明12', 35, '苏州', '读书');

3、主要代码示例

新建DBUtils.cs 数据库帮助类

public static SQLiteConnection GetSQLiteConnection()
        {
      
        
        
            //Sqlite数据库地址<br>            
            string str = AppDomain.CurrentDomain.BaseDirectory;
            var con = new SQLiteConnection("Data Source=" + str + "DB\\user.db");
            return con;
        }
        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>


        public static DataTable GetListTable(int pageIndex, int pageSize, ref int recordCount)
        {
      
        
        


            using (IDbConnection cnn = new SQLiteConnection(GetSQLiteConnection()))
            {
      
        
        
                pageIndex --;
                DataTable dt = new DataTable();
                cnn.Open();               


                StringBuilder sbCount = new StringBuilder();
                sbCount.Append(@"SELECT count(id) recordCount from user where 1 = 1");
                StringBuilder sb = new StringBuilder();
                sb.Append(@"SELECT * from user where 1=1 ");          


                recordCount = cnn.Query<int>(sbCount.ToString()).FirstOrDefault();
                sb.Append(" order by id asc ");
                sb.AppendFormat(" limit {0} offset {1} ", pageSize, pageSize * pageIndex);
                var reader = cnn.ExecuteReader(sb.ToString());
                dt.Load(reader);
                return dt;
            }
        }     
    }

新建Form2窗体文件,主要代码如下:

/// <summary>
        /// 每页记录数
        /// </summary>
        private int pageSize = 3;


        /// <summary>
        /// 总记录数
        /// </summary>
        private int recordCount = 0;


        /// <summary>
        /// 总页数
        /// </summary>
        private int pageCount = 0;


        /// <summary>
        /// 当前页
        /// </summary>
        private int currentPage = 1;
        public Form2()
        {
      
        
        
            InitializeComponent();
        }


        private void Form2_Load(object sender, EventArgs e)
        {
      
        
        
            txtCurrentPage.Text = "0";
            loadData();
        }
        /// <summary>
        /// 加载数据
        /// </summary>
        private void loadData()
        {
      
        
        
            dataGridView1.DataSource = DBUtils.GetListTable(currentPage, pageSize, ref recordCount);         
            pageCount = (recordCount + pageSize - 1) / pageSize;
            if (pageCount == 0)
            {
      
        
        
                lblRecordCount.Text = "0";
                txtCurrentPage.Text = "0";
                lblTotal.Text = "/0页";
            }
            else
            {                
                lblRecordCount.Text = "总记录数:" + recordCount;
                txtCurrentPage.Text = currentPage.ToString();
                lblTotal.Text = "/" + pageCount + "页";
            }




        }
        /// <summary>
        /// 首页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>


        private void btnFirst_Click(object sender, EventArgs e)
        {
      
        
        
            currentPage = 1;
            loadData();
        }
        /// <summary>
        /// 下一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnNext_Click(object sender, EventArgs e)
        {
      
        
        
            if (currentPage < pageCount)
            {
      
        
        
                currentPage++;
                loadData();
            }
            else
            {
      
        
        
                MessageBox.Show("当前已经是最后一页");
            }
        }
        /// <summary>
        /// 上一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLast_Click(object sender, EventArgs e)
        {
      
        
        
            if (currentPage == 1)
            {
      
        
        
                MessageBox.Show("当前已经是第一页");
            }
            else
            {
      
        
        
                currentPage--;
                loadData();


            }
        }
        /// <summary>
        /// 末页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>


        private void btnEnd_Click(object sender, EventArgs e)
        {
      
        
        
            currentPage = pageCount;
            loadData();
        }
        /// <summary>
        /// 跳转页码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>


        private void btnGoTo_Click(object sender, EventArgs e)
        {
      
        
        
            if (!isIntergerNonZero(txtCurrentPage.Text.Trim()))
            {
      
        
        
                MessageBox.Show("跳转页码必须为正整数");
            }
            else
            {               
               int page = Convert.ToInt32(txtCurrentPage.Text.Trim());
                if(page<=pageCount)
                {
      
        
        
                    currentPage = page;
                    loadData();
                }
                else
                {
      
        
        
                    MessageBox.Show("跳转页面不能大于总页数");
                }


            }
        }
        /// <summary>
        /// 校验是否为正整数
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private static bool isIntergerNonZero(string str)
        {
      
        
        
            return string.IsNullOrWhiteSpace(str) ? false : Regex.IsMatch(str, @"^[1-9]\d*$");
        }

4、运行界面

主要实现了当前记录数、共有多少页、首页、上一页、下一页、默认、指定页跳转的功能。

image_094f9eea.png

以上就是Winfrom 实现DataGridView 自定义分页的案例,欢迎互相交流学习!

相关文章
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
76 0
|
6月前
|
C# C++
C# 自定义时间进度条
本文作者通过参考leslie_xin的一篇文章,成功创建了一个自定义的WinForms控件——时间进度条,该控件带有时间刻度和多种可定制的属性,如颜色、时间间隔等。作者在控件中加入了开始和结束时间,以及自适应的时间刻度间隔。控件能根据设置显示时间标签,并提供了事件处理,如值改变时的触发。代码中包含了计算时间刻度、绘制刻度线和时间标签的逻辑。作者强调了避免循环调用事件、使用OnXXX()形式的事件处理函数以及注意自定义控件中的属性和事件设计。
147 7
|
4月前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
126 1
|
编译器 C#
c# 自定义扩展方法
c# 自定义扩展方法
|
7月前
|
存储 缓存 C#
46.c#:datagridview控件
46.c#:datagridview控件
106 1
|
7月前
|
移动开发 JavaScript 安全
C# 实现微信自定义分享
C# 实现微信自定义分享
|
7月前
|
C#
C#学习相关系列之自定义遍历器
C#学习相关系列之自定义遍历器
|
7月前
|
SQL 数据库连接 数据库
C# | 将DataGridView中的数据保存到Accesss数据库
要将WinForm的DataGridView中的数据保存到Access数据库,可以按照本文的步骤进行。 在Visual Studio中,打开项目,右键单击“引用”文件夹,选择“添加引用”,在“COM”选项卡中找到并选中“Microsoft Office 14.0 Access Database Engine Object Library”,然后单击“确定”按钮。
318 0
C# | 将DataGridView中的数据保存到Accesss数据库
|
7月前
|
XML 存储 JSON
C# | DataGridView数据转存为Json、XML格式
DataGridView是常用的数据展示组件,而将其转存为Json或XML格式,则可以方便地进行数据的传输和存储。 Json格式具有轻量、易读、易解析等优点,广泛应用于Web开发、API接口传输等场景。 XML格式则具有良好的结构化特性,支持命名空间、数据类型等复杂数据表示方式,被广泛应用于数据交换、配置文件等领域。 因此,将DataGridView数据转存为Json、XML格式,不仅能够方便地进行数据的传输和存储,还能够满足不同场景下的数据需求。 本篇文章将介绍如何将DataGridView数据转存为Json、XML格式,并提供相应的代码示例。
239 0
C# | DataGridView数据转存为Json、XML格式
|
7月前
|
JSON C# 数据格式
C# | 使用DataGridView展示JSON数组
你想展示一个复杂的JSON数组数据吗?但是你却不知道该如何展示它,是吗?没问题,因为本文就是为解决这个问题而生的!使用DataGridView轻松地将JSON数组数据以表格的形式呈现出来,这样你就可以更加清晰地了解和处理数据了。 让我们一起来探索如何实现吧!
206 0
C# | 使用DataGridView展示JSON数组