当前位置: 首页 > article >正文

基于BindingList的WinForm数据绑定机制与DataGridView动态刷新技术

前言:

本文以连接SQLite为例进行代码演示

一、首先建立里一个模型类

   public class MyData
   {
       public int id { get; set; }
       public string name { get; set; }
       public int age { get; set; }
       public string sex { get; set; }
       public string address { get; set; }
   }

二、封装一个连接SQLite方法,并返回BindingList集合用于DataGridView使用

 private static readonly object _lock = new object();//确保线程安全

 public static BindingList<MyData> GetData(string sql, int offset, int limit)
 {
     lock (_lock)
     {
         // 创建一个BindingList来保存查询结果  
         BindingList<MyData> dataList = new BindingList<MyData>();

         // 使用SQLiteConnection打开数据库连接  
         using (SQLiteConnection connection = new SQLiteConnection(connectionString))
         {
             connection.Open();
             using (SQLiteCommand command = new SQLiteCommand(sql, connection))
             {
                 // 添加分页的查询语句
                 command.CommandText = sql + " LIMIT @limit OFFSET @offset";
                 command.Parameters.AddWithValue("@limit", limit);
                 command.Parameters.AddWithValue("@offset", offset);
                 using (SQLiteDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         // 读取数据库中的每一行数据,并将其添加到BindingList
                         MyData data = new MyData
                         {
                             id = reader.GetInt32(0),
                             name = reader.IsDBNull(1) ? "N/A" : reader.GetString(1),
                             age = reader.IsDBNull(2) ? 0 : reader.GetInt32(2),
                             sex = reader.IsDBNull(3) ? "N/A" : reader.GetString(3),
                             address = reader.IsDBNull(4) ? "N/A" : reader.GetString(4)
                         };
                         dataList.Add(data);
                     }
                 }
             }
         }
         return dataList;
     }
 }

三、数据展示(查、改,删、增)

  public static void BindDataGridView(DataGridView dataGridView)
  {
      // 计算偏移量,偏移量 = (当前页 - 1) * 每页条数
      int offset = (currentPage - 1) * pageSize;

      // SQL查询语句
      string sql = "SELECT * FROM ceshi Where Status!='-1'";
      // 获取数据并绑定到DataGridView
      BindingList<MyData> dataList = GetData(sql, offset, pageSize);
   }
 public static void SQLUPDATE(MyData data, string sql, DataGridView dataGridView)
 {
     var bindingList = dataGridView.DataSource as BindingList<MyData>;
     if (bindingList != null)
     {
         // 找到要修改的项
         var dataToEdit = bindingList.FirstOrDefault(d => d.id == data.id);
         if (dataToEdit != null)
         {
             // 更新BindingList中的数据
             dataToEdit.name = data.name;
             dataToEdit.age = data.age;
             dataToEdit.sex = data.sex;
             dataToEdit.address = data.address;
             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
             {
                 connection.Open();
                 // 创建SQLite命令对象
                 using (SQLiteCommand command = new SQLiteCommand(sql, connection))
                 {
                     // 执行更新操作
                     command.ExecuteNonQuery();
                 }
             }

             dataGridView.Refresh();
         }
     }
 }
 public static void SQLDelete(int id, DataGridView dataGridView)
 {
     var bindingList = dataGridView.DataSource as BindingList<MyData>;
     if (bindingList != null)
     {
         var itemToDelete = bindingList.FirstOrDefault(d => d.id == id);
         if (itemToDelete != null)
         {
             bindingList.Remove(itemToDelete); // 从BindingList中移除
             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
             {
                 connection.Open();

                 // 删除SQL语句
                 string sql = "UPDATE ceshi set Status='-1'  WHERE id = @id";

                 // 创建SQLite命令对象
                 using (SQLiteCommand command = new SQLiteCommand(sql, connection))
                 {
                     // 添加参数
                     command.Parameters.AddWithValue("@id", id);

                     // 执行删除操作
                     command.ExecuteNonQuery();
                 }
             }
             BindDataGridView(dataGridView);
         }
     }
 }
 public static void SQLAdd(MyData data, string sql, DataGridView dataGridView)
 {
     // 将新数据项添加到BindingList中
     var bindingList = dataGridView.DataSource as BindingList<MyData>;
     if (bindingList != null)
     {
         bindingList.Add(data); // 添加新数据
     }
     using (SQLiteConnection connection = new SQLiteConnection(connectionString))
     {
         connection.Open();
         // 创建SQLite命令对象
         using (SQLiteCommand command = new SQLiteCommand(sql, connection))
         {
             // 执行插入操作
             command.ExecuteNonQuery();
             // 获取插入数据的自增ID
             long newId = connection.LastInsertRowId;

             data.id = (int)newId; // 返回自增的ID
         }
         BindDataGridView(dataGridView);
     }
 }

四、上下页切换

我的最新作品,快来一睹为快!


http://www.kler.cn/a/402579.html

相关文章:

  • 智慧社区管理系统平台提升物业运营效率与用户体验
  • 一文学会Golang里拼接字符串的6种方式(性能对比)
  • SpringBoot+SpringCloud面试题整理附答案
  • Transformer详解及衍生模型GPT|T5|LLaMa
  • [SUCTF2019]SignIn
  • CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
  • Layui的select控件的onchange事件 无效的解决方法
  • MySQL库和表的操作
  • Spark RDD sortBy算子执行时进行数据 “采样”是什么意思?
  • 电脑超频是什么意思?超频的好处和坏处
  • Java小白成长记(创作笔记一)
  • Agent AI:智能代理AI:多模态交互视野的探究
  • Docker 数据卷 和 挂载 的区别
  • python脚本实现csv中百度经纬度转84经纬度
  • 高级网络安全——WEP, WPA(week6)
  • Android Glide load origin Bitmap, Kotlin
  • 【优选算法篇】分治乾坤,万物归一:在重组中窥见无声的秩序
  • 深度学习三大框架对比与实战:PyTorch、TensorFlow 和 Keras 全面解析
  • Android开发实战班 - 应用架构 之 Kotlin 协程基础
  • 【实用技能】使用 TX Text Control 创建带有嵌入式附件的 PDF 文档
  • 从零开始的c++之旅——map_set的使用
  • 如何对AWS进行节省
  • OpenCvSharp Demo 饱和度、明度、对比度、锐化、阴影、高光、色温实现滤镜效果
  • B站直播模块解读——MVVM类似物
  • 微软在Ignite 2024发布Copilot+新功能
  • 深度学习是什么?