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;有了它就可以把非常长的网址缩短。这样分享推广起来非常方便。今天…

学习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…

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

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

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

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

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

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

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以上版本。 安…

WCF 服务端+客户端动态调用

最近在写WCF服务相关代码&#xff0c;把项目中用到的通讯框架做了下整理&#xff0c;以备以后自己记忆。 WCF服务端&#xff1a; 包含契约定义&#xff1a;WCF.Contract、契约实现&#xff1a;WCF.Service 以及宿主主程序&#xff1a;WcfServerHost 本DEMO 为了为了演示&#x…

微信小程序把玩(二十六)navigator组件

微信小程序把玩&#xff08;二十六&#xff09;navigator组件 原文:微信小程序把玩&#xff08;二十六&#xff09;navigator组件navigator跳转分为两个状态一种是关闭当前页面一种是不关闭当前页面。用redirect属性指定。 主要属性&#xff1a; wxml <navigator url".…