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

目录

安装Dapper依赖

安装SQLite依赖

新建SQLite数据库文件

主要代码示例

运行界面


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

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

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

  1. 安装Dapper依赖

命令如下:

Install-Package Dapper -Version 1.40.0

1、安装SQLite依赖

命令如下:

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

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、运行界面

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超维空间S2无人机使用说明书——21、VINS视觉定位仿真

引言&#xff1a;为了实现室内无人机的定位功能&#xff0c;S系列无人机配置了VINS-FUSION定位环境&#xff0c;主要包含了仿真跑数据集和实际操作部分。为了提前熟悉使用原理&#xff0c;可以先使用仿真环境跑数据集进行学习和理解 硬件&#xff1a;1080P显示器、Jetson orin…

正割函数(sec)

1. 定义 正割与余弦互为倒数&#xff0c;余割与正弦互为倒数。即&#xff1a; ⎧⎩⎨⎪⎪⎪⎪secθ1cosθcscθ1sinθ也即在几何上&#xff0c;设 △ABC&#xff0c;∠C90&#xff0c;ACb&#xff0c;BCa&#xff0c;ABc&#xff0c;正割函数&#xff1a;sec∠Ac/b&#xff08;…

网站:推荐几款好用的在线短链生成工具

目录 一、网站工具&#xff1a;ft12 二、网站工具&#xff1a;缩我短网址 三、Sina新浪短网址 四、短网址在线生成- ock.cn 五、网站工具&#xff1a;i排版 短链技术目前对网站推广非常的有用&#xff0c;有了它就可以把非常长的网址缩短。这样分享推广起来非常方便。今天…

java中范型的限定

泛型的一般格式Test<T>&#xff0c;使用起来很方便&#xff0c;相当于Object&#xff0c;而且和C/C中的模板差不多。 但是Java的泛型还有一个好处&#xff0c;在于可以限定T的类型&#xff0c;格式如下&#xff1a;Test<T extends Base>&#xff0c;这样就要求Test…

猿创征文|docker 系列: 具名、匿名挂载介绍

目录 匿名挂载 1.1 含义 1.2 匿名挂载示例 1.3 文件同步测试 具名挂载 2.1 含义

学习mysql中使用inner join,left join 等

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下&#xff1a; -----------------------------------------…

MySQL:union all与union区别详解

union 是对数据进行并集操作&#xff0c;不包括重复行&#xff0c;同时进行默认排序 Union all 是对数据进行并集操作&#xff0c;包括重复行&#xff0c;不进行排序 举例说明&#xff1a; 创建数据库表&#xff1a; CREATE TABLE t_demo ( id int(32) NOT NULL, name var…

正则表达式小结

正则表达式主要是用来操作字符串的&#xff0c;可以预先定义特定字符以及字符组合&#xff0c;来对字符串进行匹配或从中获取我们想要的字串&#xff0c;从而方便操作。在实际测试项目中&#xff0c;我们主要用来做两件事&#xff1a;第一&#xff0c;用正则表达式来判断给定的…

如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树

1.索引是什么东西&#xff1f; 索引就是一个数据结构&#xff0c;我们把表中的记录用一个适合高效查找的数据结构来表示&#xff0c;目的就是让查询变得更高效。 2.它到底怎么运作的&#xff1f; 这个问题就说来话长了&#xff0c;且听我慢慢道来&#xff1a; 在mysql中使用…

微信输入法来了,一起来体验一下吧

大家期待已久的微信输入法终于来了&#xff0c;不是内置于微信当中&#xff0c;而是一款独立应用的APP&#xff0c;今天小编带大家来体验一下微信输入&#xff0c;到底好不好用&#xff1f; 目录 1、安装 2、功能介绍 2.1、智能推荐公众号、视频号、小程序等 2.2、可直接发…

python2.6.6安装MySQL-python模块正确方法

Centos6.5 x64 系统python2.6.6安装MySQL-python模块 一、安装前准备 操作系统&#xff1a;centos6.5 x64 安装python和python开发工具   python python-devel 安装mysql-server和mysql开发工具   mysql-server mysql mysql-devel yum -y install mysql-devel libxml2 libx…

猿创征文 | Docker实战:Linux环境安装Tomcat安装步骤

目录 1.官网镜像版本查找 2、拉取tomcat镜像 3. 查看镜像是否下载成功

博客搬家

博客搬家 今天这篇博客只想向大家公布一件事&#xff0c;我的博客要搬家了&#xff0c;确切的说是我要同步我两个博客端的博客&#xff0c;原因主要有二&#xff1a; 我最初在网络上查资料主要看到的两个端有csdn 也有 博客园&#xff08;我喜欢的一个大神在这&#xff09;&…

猿创征文 | Docker笔记:Docker网络知识介绍

目录 1、docker网络介绍 2、测试容器和宿主主机的通信 2.1 宿主主机可以ping通 docker0

Zabbix的安装(源码安装)

zabbix3.0完全安装 安装zabbix首先需要安装ltmp&#xff08;lnmp&#xff09;&#xff0c;这里的t是指tengine&#xff08;taobao的nginx版本&#xff09;&#xff0c;安装教程见 http://www.ltmp.cc 安装的时候PHP选择5.4版本&#xff0c;因为zabbix3.0需要php5.4以上版本。 安…