• 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 ,大家不需要在新建了。

    新建表脚本

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

    3、主要代码示例

    新建DBUtils.cs 数据库帮助类

    
    
    
    1. public static SQLiteConnection GetSQLiteConnection()
    2. {
    3. //Sqlite数据库地址<br>
    4. string str = AppDomain.CurrentDomain.BaseDirectory;
    5. var con = new SQLiteConnection("Data Source=" + str + "DB\\user.db");
    6. return con;
    7. }
    8. /// <summary>
    9. /// 分页查询
    10. /// </summary>
    11. /// <param name="pageIndex"></param>
    12. /// <param name="pageSize"></param>
    13. /// <returns></returns>
    14. public static DataTable GetListTable(int pageIndex, int pageSize, ref int recordCount)
    15. {
    16. using (IDbConnection cnn = new SQLiteConnection(GetSQLiteConnection()))
    17. {
    18. pageIndex --;
    19. DataTable dt = new DataTable();
    20. cnn.Open();
    21. StringBuilder sbCount = new StringBuilder();
    22. sbCount.Append(@"SELECT count(id) recordCount from user where 1 = 1");
    23. StringBuilder sb = new StringBuilder();
    24. sb.Append(@"SELECT * from user where 1=1 ");
    25. recordCount = cnn.Query<int>(sbCount.ToString()).FirstOrDefault();
    26. sb.Append(" order by id asc ");
    27. sb.AppendFormat(" limit {0} offset {1} ", pageSize, pageSize * pageIndex);
    28. var reader = cnn.ExecuteReader(sb.ToString());
    29. dt.Load(reader);
    30. return dt;
    31. }
    32. }
    33. }

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

    1. /// <summary>
    2. /// 每页记录数
    3. /// </summary>
    4. private int pageSize = 3;
    5. /// <summary>
    6. /// 总记录数
    7. /// </summary>
    8. private int recordCount = 0;
    9. /// <summary>
    10. /// 总页数
    11. /// </summary>
    12. private int pageCount = 0;
    13. /// <summary>
    14. /// 当前页
    15. /// </summary>
    16. private int currentPage = 1;
    17. public Form2()
    18. {
    19. InitializeComponent();
    20. }
    21. private void Form2_Load(object sender, EventArgs e)
    22. {
    23. txtCurrentPage.Text = "0";
    24. loadData();
    25. }
    26. /// <summary>
    27. /// 加载数据
    28. /// </summary>
    29. private void loadData()
    30. {
    31. dataGridView1.DataSource = DBUtils.GetListTable(currentPage, pageSize, ref recordCount);
    32. pageCount = (recordCount + pageSize - 1) / pageSize;
    33. if (pageCount == 0)
    34. {
    35. lblRecordCount.Text = "0";
    36. txtCurrentPage.Text = "0";
    37. lblTotal.Text = "/0页";
    38. }
    39. else
    40. {
    41. lblRecordCount.Text = "总记录数:" + recordCount;
    42. txtCurrentPage.Text = currentPage.ToString();
    43. lblTotal.Text = "/" + pageCount + "页";
    44. }
    45. }
    46. /// <summary>
    47. /// 首页
    48. /// </summary>
    49. /// <param name="sender"></param>
    50. /// <param name="e"></param>
    51. private void btnFirst_Click(object sender, EventArgs e)
    52. {
    53. currentPage = 1;
    54. loadData();
    55. }
    56. /// <summary>
    57. /// 下一页
    58. /// </summary>
    59. /// <param name="sender"></param>
    60. /// <param name="e"></param>
    61. private void btnNext_Click(object sender, EventArgs e)
    62. {
    63. if (currentPage < pageCount)
    64. {
    65. currentPage++;
    66. loadData();
    67. }
    68. else
    69. {
    70. MessageBox.Show("当前已经是最后一页");
    71. }
    72. }
    73. /// <summary>
    74. /// 上一页
    75. /// </summary>
    76. /// <param name="sender"></param>
    77. /// <param name="e"></param>
    78. private void btnLast_Click(object sender, EventArgs e)
    79. {
    80. if (currentPage == 1)
    81. {
    82. MessageBox.Show("当前已经是第一页");
    83. }
    84. else
    85. {
    86. currentPage--;
    87. loadData();
    88. }
    89. }
    90. /// <summary>
    91. /// 末页
    92. /// </summary>
    93. /// <param name="sender"></param>
    94. /// <param name="e"></param>
    95. private void btnEnd_Click(object sender, EventArgs e)
    96. {
    97. currentPage = pageCount;
    98. loadData();
    99. }
    100. /// <summary>
    101. /// 跳转页码
    102. /// </summary>
    103. /// <param name="sender"></param>
    104. /// <param name="e"></param>
    105. private void btnGoTo_Click(object sender, EventArgs e)
    106. {
    107. if (!isIntergerNonZero(txtCurrentPage.Text.Trim()))
    108. {
    109. MessageBox.Show("跳转页码必须为正整数");
    110. }
    111. else
    112. {
    113. int page = Convert.ToInt32(txtCurrentPage.Text.Trim());
    114. if(page<=pageCount)
    115. {
    116. currentPage = page;
    117. loadData();
    118. }
    119. else
    120. {
    121. MessageBox.Show("跳转页面不能大于总页数");
    122. }
    123. }
    124. }
    125. /// <summary>
    126. /// 校验是否为正整数
    127. /// </summary>
    128. /// <param name="str"></param>
    129. /// <returns></returns>
    130. private static bool isIntergerNonZero(string str)
    131. {
    132. return string.IsNullOrWhiteSpace(str) ? false : Regex.IsMatch(str, @"^[1-9]\d*$");
    133. }

    4、运行界面

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

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

  • 相关阅读:
    【JavaWeb】案例一:用户注册
    pyenv安装python,Makefile报错
    cocoapods使用
    如何使用B/S开发工具DevExtreme的图表控件 - 自定义轴位置?
    python调用32位的ControlCan.dll实现can报文的收发
    Gooxi国鑫搭载第四代英特尔至强可扩展处理器系列服务器焕新登场
    opencv边缘-边界处理
    MindSponge分子动力学模拟——增强采样(2024.11)
    Kubernetes(k8s)是什么?解决了哪些问题?
    go语言中的数组指针和指针数组的区别详解
  • 原文地址:https://blog.csdn.net/xishining/article/details/126477198