服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# winform分页查询的实现示例

C# winform分页查询的实现示例

2022-11-15 14:29一枝韩独秀 C#

这篇文章主要介绍了C# winform分页查询的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、功能需求

本实例将通过c# winform实现简单的分页功能,需要的基础知识有SQL语句,c#语言基础以及c# winform的一些简单知识。

2、界面设计

这是一个简单的分页查询的界面,可以输入任意字段进行查询,这四个字段在数据准备会提到,整体界面如图1所示。

C# winform分页查询的实现示例

图1

中间显示是一个DataGridView,编辑好列和id,SortMode选择Automatic,意思是所有列自动铺满DataGridView,如图2所示。

C# winform分页查询的实现示例

图2

3、数据准备

本实例涉及到删查改,因此要有数据表以及对数据表进行操作的代码。数据库表非常简单,如图3所示,分别有对应四个字段。

C# winform分页查询的实现示例

图3

later_back模型类对应数据库操作类代码如下:

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WindowsFormsApp1.Bean;


namespace WindowsFormsApp1.SqlHelper
{
  class LaterBackHelper
  {
      public LaterBackHelper(){}


      public void insert(LaterBack laterBack)
      {
          string sql = "insert into later_back(dormitory_id,student_no,time,reason) values('" + laterBack.Dormitory_id + "','" + laterBack.Student_no + "'," + "'" + laterBack.Time + "',"
              + "'" + laterBack.Reason + "')";
          try
          {
              int iRet = SqlHelperBase.ExecuteSql(sql);
              if (iRet > 0)
              {
                  MessageBox.Show("新增成功", "系统提示");
              }
              else
              {
                  MessageBox.Show("新增失败", "系统提示");
              }
          }
          catch (Exception)
          {
              throw;
          }
      }


      public int update(LaterBack laterBack)
      {
          string sql = "update later_back set reason='" + laterBack.Reason + "' where student_no= '" + laterBack.Student_no + "' and"
              + " time = '" + laterBack.Time + "' and " + " dormitory_id= '" + laterBack.Dormitory_id +  "'";
          try
          {
              int iRet = SqlHelperBase.ExecuteSql(sql);//这里返回的是受影响的行数,为int值。可以根据返回的值进行判断是否插入成功。
              if (iRet > 0)
              {
                  MessageBox.Show("修改成功", "系统提示");
              }
              else
              {
                  MessageBox.Show("修改失败", "系统提示");
              }
              return iRet;
          }
          catch (Exception)
          {
              throw;
          }
      }


      public int delete(LaterBack laterBack)
      {
          string sql = "delete from later_back where dormitory_id='" + laterBack.Dormitory_id + "' and" + " student_no= '" + laterBack.Student_no + "' and"
              + " time = '" + laterBack.Time + "' and" + " reason= '" + laterBack.Reason+"'";
          try
          {
              int iRet = SqlHelperBase.ExecuteSql(sql);//这里返回的是受影响的行数,为int值。可以根据返回的值进行判断是否插入成功。
              if (iRet > 0)
              {
                  MessageBox.Show("删除成功", "系统提示");
              }
              else
              {
                  MessageBox.Show("删除失败", "系统提示");
              }
              return iRet;
          }
          catch (Exception)
          {
              throw;
          }
      }


      public List<LaterBack> getAllLaterBacks()
      {
          List<LaterBack> laterBacks= new List<LaterBack>();
          string sql = "select * from later_back";
          MySqlDataReader mySqlDataReader = SqlHelperBase.ExecuteReader(sql);
          while (mySqlDataReader.Read())
          {
              LaterBack laterBack = new LaterBack(int.Parse(mySqlDataReader[0].ToString()), int.Parse(mySqlDataReader[1].ToString()), mySqlDataReader[2].ToString(),
                  mySqlDataReader[3].ToString());
              laterBacks.Add(laterBack);
          }
          mySqlDataReader.Close();
          return laterBacks;
      }
      public List<LaterBack> getAllLaterBacks(int student_no)
      {
          List<LaterBack> laterBacks= new List<LaterBack>();
          string sql = "select * from later_back where student_no ='" + student_no + "'";
          MySqlDataReader mySqlDataReader = SqlHelperBase.ExecuteReader(sql);
          while (mySqlDataReader.Read())
          {
              LaterBack laterBack = new LaterBack(int.Parse(mySqlDataReader[0].ToString()), int.Parse(mySqlDataReader[1].ToString()), mySqlDataReader[2].ToString(),
                  mySqlDataReader[3].ToString());
              laterBacks.Add(laterBack);
          }
          mySqlDataReader.Close();
          return laterBacks;
      }
      public DataSet getAllDataSet()
      {
          string sql = "select * from later_back";
          return SqlHelperBase.GetDataSet(sql);
      }
      //模糊查询
      public DataSet getDataSet(LaterBack laterBack)
      {
          string sql="";
          if(laterBack.Student_no != -1)
          {
              if (laterBack.Dormitory_id != -1) sql = "select * from later_back where dormitory_id like '%" + laterBack.Dormitory_id
                        + "%' and student_no like '%" + laterBack.Student_no + "%' and time like '%" + laterBack.Time
                        + "%' and reason like '%" + laterBack.Reason + "%'";
              else sql = "select * from later_back where student_no like '%" + laterBack.Student_no + "%' and time like '%" + laterBack.Time
                        + "%' and reason like '%" + laterBack.Reason + "%'";
          }
          else
          {
              if (laterBack.Dormitory_id != -1) sql = "select * from later_back where dormitory_id like '%" + laterBack.Dormitory_id
                         + "%' and time like '%" + laterBack.Time+ "%' and reason like '%" + laterBack.Reason + "%'";
              else sql = "select * from later_back where time like '%" + laterBack.Time
                        + "%' and reason like '%" + laterBack.Reason + "%'";
          }
          return SqlHelperBase.GetDataSet(sql);
      }
  }
}

4、源码实现

实现分页时,我的思想是,在每次查询时得到一个dataset1,然后在分页时根据一个from_index和一个end_index去得到当前页面要显示的dataset2,用dataset2来刷新当前要显示的数据,然后在dataset2里头支持行数据的修改与删除,可能从这么写不大合适,但是能完成分页的功能,仅供参考。源码如下:

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WindowsFormsApp1.Bean;
using WindowsFormsApp1.CacheUtil;
using WindowsFormsApp1.SqlHelper;

namespace WindowsFormsApp1
{
  public partial class StudentLateBackPanelRightSelect : Form
  {
      private LaterBackHelper laterBackHelper;
      private string []page_counts = { "5","6","7","8","9","10","15","20"};
      private int total_page, page_step, current_page_index, total_count;
      private DataSet dataSet;

      public StudentLateBackPanelRightSelect()
      {
          laterBackHelper = new LaterBackHelper();
          dataSet = laterBackHelper.getAllDataSet();
          total_count = dataSet.Tables[0].Rows.Count;
          page_step = 5;
          total_page = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(total_count) / page_step));
          InitializeComponent();
          
          initView(GetViewDataSet(dataSet,1,5));
          comboBox_page_count.Items.AddRange(page_counts);
          comboBox_page_count.SelectedIndex = 0;
          label_all_item_count.Text = total_count.ToString();
          label_page_count.Text = total_page.ToString();
      }
      //每次点击时刷新全局数据
      private void initDataPage(int total_count,int page_step,  int current_page_index)
      {
          this.total_count = total_count;
          this.page_step = page_step;
          this.total_page = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(total_count) / page_step));
          this.current_page_index = current_page_index;
      }
      //初始化界面并加载数据
      private void initView(DataSet ds)
      {
          dataGridView.AutoGenerateColumns = false;
          dataGridView.DataSource = ds.Tables[0];
          this.dataGridView.Columns["dor_id"].DataPropertyName = ds.Tables[0].Columns[0].ToString();
          this.dataGridView.Columns["stu_id"].DataPropertyName = ds.Tables[0].Columns[1].ToString();
          this.dataGridView.Columns["time"].DataPropertyName = ds.Tables[0].Columns[2].ToString();
          this.dataGridView.Columns["reason"].DataPropertyName = ds.Tables[0].Columns[3].ToString();
      }
      
      private void button_select_Click(object sender, EventArgs e)
      {
          string stu_id = textBox_stu_id.Text, dor_id = textBox_dor_id.Text, time = textBox_time.Text, reason = textBox_reason.Text;
          if(stu_id.Equals("")&& dor_id.Equals("") && time.Equals("") && reason.Equals(""))
          {
              return;
          }
          if (dor_id.Equals("")) dor_id = "-1";
          if (stu_id.Equals("")) stu_id = "-1";
          LaterBack laterBack = new LaterBack(int.Parse(dor_id), int.Parse(stu_id), time, reason);
          dataSet.Clear();
          dataSet = laterBackHelper.getDataSet(laterBack);
          initDataPage(dataSet.Tables[0].Rows.Count, page_step, 1);
          initView(GetViewDataSet(dataSet, 1, page_step));
          label_page_count.Text = total_page.ToString();
          label_page_range.Text = "1-" + page_step.ToString();
          label_all_item_count.Text = total_count.ToString();
      }
      //只能输入数字
      private void only_num_press(object sender, KeyPressEventArgs e)
      {
          if (!(Char.IsNumber(e.KeyChar)) && e.KeyChar != (char)8)
          {
              e.Handled = true;
          }
      }
      //对行数据进行删除或修改操作
      private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
      {
          string action = dataGridView.Columns[e.ColumnIndex].Name;//操作类型
          var cells = dataGridView.Rows[e.RowIndex].Cells;
          LaterBack laterBack = new LaterBack(int.Parse(cells[0].Value.ToString()), int.Parse(cells[1].Value.ToString()), cells[2].Value.ToString(), cells[3].Value.ToString());
          switch (action)
          {
              case "update":
                  //获取相应列的数据ID,弹出加载了该ID数据详细信息的Form,用以修改
                 StudentLateBackPanelRightUpdate studentLateBackPanelRightUpdate =  new StudentLateBackPanelRightUpdate(laterBack);
                  studentLateBackPanelRightUpdate.Show();
                  break;
              case "delete":
                  if (MessageBox.Show("确定删除这行数据吗?", "删除提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
                  {
                      //获取相应列的数据ID,删除此数据记录      
                      int result = laterBackHelper.delete(laterBack);
                      if(result > 0)
                      {
                          //dataSet.Clear();
                          dataSet = laterBackHelper.getAllDataSet();
                          initDataPage(dataSet.Tables[0].Rows.Count,page_step,1);
                          initView(GetViewDataSet(dataSet,1,page_step));
                          label_page_count.Text = total_page.ToString();
                          label_page_range.Text = "1-" + page_step.ToString();
                          label_all_item_count.Text = total_count.ToString();
                      }
                  }
                  break;
              default:
                  break;
          }
      }


      //获取要显示的数据源
      public DataSet GetViewDataSet(DataSet a_ds,int from_index,int end_index)
      {
          //首先先声明一个DataSet对象和一个DataTable对象      
          DataSet l_ds = new DataSet();
          DataTable l_dt = new DataTable();
          //构建DataTable对象的列值
          l_dt.Columns.Add("dor_id");//这些列名就是返回的DataSet的列名,可以随意添加
          l_dt.Columns.Add("stu_id");
          l_dt.Columns.Add("time");
          l_dt.Columns.Add("reason");
          
          //遍历传进来的DataSet的值,并对DataTable进行赋值操作
          for (int i = from_index - 1; i < end_index ; i++)
          {
              DataRow dr = l_dt.NewRow();//首先新增一行,然后对其进行赋值
              dr["dor_id"] = a_ds.Tables[0].Rows[i][0].ToString().Trim();
              dr["stu_id"] = a_ds.Tables[0].Rows[i][1].ToString().Trim();
              dr["time"] = a_ds.Tables[0].Rows[i][2].ToString().Trim();
              dr["reason"] = a_ds.Tables[0].Rows[i][3].ToString().Trim();
              
              l_dt.Rows.Add(dr);//这里一定要add进去
          }
          l_ds.Tables.Add(l_dt);//这里也不能忘记
          return l_ds;
      }


      //combobox更改触发事件
      private void combobox_selected_listen(object sender, EventArgs e)
      {
          page_step = int.Parse(comboBox_page_count.SelectedItem.ToString());
          textBox_page_count.Text = 1.ToString();
          label_page_range.Text = "1-" + page_step.ToString();
          total_page = Convert.ToInt16( Math.Ceiling(Convert.ToDouble(total_count) / page_step));
          label_page_count.Text = total_page.ToString();
          initView(GetViewDataSet(dataSet,  1,  page_step));
      }

      //输入页数变化
      private void page_count_change(object sender, EventArgs e)
      {
          if (textBox_page_count.Text.Equals("")) return;
          if (int.Parse(textBox_page_count.Text) < 1)
          {
              MessageBox.Show("输入页数不能小于1", "系统提示");
              return;
          }
          if (int.Parse(textBox_page_count.Text) > total_page)
          {
              MessageBox.Show("输入页数超过总页数", "系统提示");
              return;
          }
          current_page_index = int.Parse(textBox_page_count.Text);
          var view_range = (current_page_index - 1)* page_step ;
          if (view_range + page_step < total_count) {
              initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
              label_page_range.Text = (view_range + 1).ToString() + "-" + (view_range + page_step).ToString();
          }
          else {
              initView(GetViewDataSet(dataSet, view_range + 1, total_count));
              label_page_range.Text = (view_range + 1).ToString() + "-" + total_count.ToString();
          }

      }

      private void button_first_page_Click(object sender, EventArgs e)
      {
          current_page_index = 1;
          var view_range = (current_page_index - 1) * page_step;
          initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
          label_page_range.Text = (view_range + 1).ToString() + "-" + page_step.ToString();
          textBox_page_count.Text = current_page_index.ToString();
      }


      private void button_previous_page_Click(object sender, EventArgs e)
      {
          if (current_page_index == 1) return;
          current_page_index -= 1;
          var view_range = (current_page_index - 1) * page_step;
          initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
          label_page_range.Text = (view_range + 1).ToString() + "-" + (view_range + page_step).ToString();
          textBox_page_count.Text = current_page_index.ToString();

      }

      private void button_next_page_Click(object sender, EventArgs e)
      {
          if (current_page_index == total_page) return;
          current_page_index += 1;
          var view_range = (current_page_index - 1) * page_step;
          if (view_range + page_step < total_count)
          {
              initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
              label_page_range.Text = (view_range + 1).ToString() + "-" + (view_range + page_step).ToString();
          }
          else
          {
              initView(GetViewDataSet(dataSet, view_range + 1, total_count));
              label_page_range.Text = (view_range + 1).ToString() + "-" + total_count.ToString();
          }
          textBox_page_count.Text = current_page_index.ToString();
      }


      private void button_last_page_Click(object sender, EventArgs e)
      {
          current_page_index = total_page;
          var view_range = (current_page_index - 1) * page_step;
          initView(GetViewDataSet(dataSet, view_range + 1, total_count));
          label_page_range.Text = (view_range + 1).ToString() + "-" + total_count.ToString();
          textBox_page_count.Text = current_page_index.ToString();
      }
  }
}

5、结果

程序运行结果如图4和图5所示,更改每页条数,或者输入页数时都能跳转到相应页面,所有功能都正常,至此,简单的分页功能就实现,如果有任何问题,欢迎给我留言。

C# winform分页查询的实现示例

图4

C# winform分页查询的实现示例

图5

到此这篇关于C# winform分页查询的实现示例的文章就介绍到这了,更多相关C# winform分页查询内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_42363997/article/details/80555340

延伸 · 阅读

精彩推荐
  • C#C#操作字符串方法总结实例代码

    C#操作字符串方法总结实例代码

    这篇文章主要介绍了C#操作字符串方法总结实例代码,需要的朋友可以参考下...

    风起苍岚9682022-01-24
  • C#C#实现txt定位指定行完整实例

    C#实现txt定位指定行完整实例

    这篇文章主要介绍了C#实现txt定位指定行的方法,涉及C#针对文本文件进行光标定位的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧11522021-10-20
  • C#Unity3D实现相机跟随控制

    Unity3D实现相机跟随控制

    这篇文章主要为大家详细介绍了Unity3D实现相机跟随控制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    c罗天下第一10642022-09-22
  • C#C# Winform调用百度接口实现人脸识别教程(附源码)

    C# Winform调用百度接口实现人脸识别教程(附源码)

    这篇文章主要介绍了C# Winform调用百度接口实现人脸识别教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    Even-LittleMonkey4672022-09-07
  • C#C#程序(含多个Dll)合并成一个Exe的简单方法

    C#程序(含多个Dll)合并成一个Exe的简单方法

    这篇文章主要为大家详细介绍了C#程序(含多个Dll)合并成一个Exe的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    飘渺公子6382021-12-13
  • C#C#多线程ThreadPool线程池详解

    C#多线程ThreadPool线程池详解

    这篇文章主要为大家详细介绍了C#多线程ThreadPool线程池的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    linYongJie4952022-01-12
  • C#winform 中显示异步下载的图片

    winform 中显示异步下载的图片

    本文主要介绍利用WebClient异步下载图片,显示在GridView上,需要的朋友可以参考下。...

    秦风11522021-11-22
  • C#C#获取客户端相关信息实例总结

    C#获取客户端相关信息实例总结

    这篇文章主要介绍了C#获取客户端相关信息的方法,以实例形式总结了C#获取客户端IP地址、网络连接、硬件信息等相关技巧,具有一定参考借鉴价值,需要的朋...

    C#教程网9632021-10-27