Winform为DataGridView添加自增列

### 使用 SqlSugar 在 WinForms 项目中实现三层架构 #### 1. 层次结构概述 在 WinForms 应用程序中采用三层架构可以提高应用程序的可维护性和扩展性。这三层分别是表示层(UI)、业务逻辑层(BLL)和服务访问层(DAL)。通过这种分层设计,每一层都有明确的责任划分。 - 表示层负责用户界面的设计和交互处理; - 业务逻辑层封装了应用的核心功能以及数据验证等操作; - 数据访问层则专注于数据库的操作[^1]。 #### 2. 创建解决方案与项目设置 创建一个新的 Visual Studio 解决方案,并添加三个独立的类库来代表上述提到的不同层次: - `WinFormsApp` (表示层): 主要用于展示窗体并接收用户的输入。 - `BusinessLogicLayer` (业务逻辑层): 定义服务接口及其具体实现。 - `DataAccessLayer` (数据访问层): 利用 SqlSugar 进行 CRUD 操作。 确保所有项目的 .NET Framework 版本一致,并安装必要的 NuGet 包如 `SqlSugar` 和其他依赖项。 #### 3. 配置连接字符串 为了能够顺利地同数据库通信,在配置文件 app.config 或者 web.config 中定义好相应的连接字符串。这里假设使用的是 SQL Server 数据库,则可以在 `app.config` 文件内加入如下节点: ```xml <connectionStrings> <add name="DefaultConnection" connectionString="Server=.;Database=DBName;User Id=username;Password=password;" providerName="System.Data.SqlClient"/> </connectionStrings> ``` 此部分应放置于 `<configuration>` 节点之下[^2]。 #### 4. 设计实体模型 基于实际需求构建对应的 C# 类作为实体对象,这些类将映射到数据库中的表。例如有一个名为 `Product.cs` 的产品信息表对应着这样的一个简单类定义: ```csharp public class Product { public int Id { get; set; } public string Name { get; set; } } ``` 此类位于 DAL 工程下以便更好地管理领域内的各种实体类型[^3]。 #### 5. 初始化 SqlSugarClient 并编写基本方法 接下来是在 `DataAccessLayer` 下面建立通用的数据上下文基底,它会初始化 SqlSugarClient 实例并且提供一些基础的方法供上层调用。下面是一个简化版的例子说明如何完成这项工作: ```csharp using SqlSugar; using System.Configuration; namespace DataAccessLayer { public abstract class DbContextBase : IDisposable { private readonly SqlSugarClient _db; protected DbContextBase() { var dbConfig = new ConnectionConfig(){ DbType = DbType.SqlServer, ConnectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString, InitKeyType = InitKeyType.Attribute, //从特性读取主键自增列信息 IsAutoCloseConnection=true }; _db=new SqlSugarClient(dbConfig); } /// <summary> /// 获取指定类型的仓储实例. /// </summary> /// <typeparam name="T">实体类型.</typeparam> /// <returns>返回 ISugarQueryable 对象.</returns> public virtual ISugarQueryable<T> GetRepository<T>() where T:class,new() { return _db.Queryable<T>(); } public void Dispose() => _db.Dispose(); } } ``` 这段代码实现了对数据库连接的基本管理和查询能力的支持[^4]。 #### 6. 编写具体的 Repository 方法 针对特定的业务场景开发专门的服务函数,比如获取全部商品表、新增单条记录等功能都可以在这个阶段被编码出来。以下是关于 `IProductService` 接口及其实现的一个例子: ```csharp // IProductService.cs public interface IProductService{ List<Product> GetAllProducts(); } // ProductService.cs public class ProductService:IProductService{ private readonly DbContextBase _context; public ProductService(DbContextBase context){ this._context=context; } public List<Product> GetAllProducts(){ using(_context as IDisposable){ return _context.GetRepository<Product>().ToList(); } } } ``` 此处展示了怎样利用之前准备好的基础设施去执行简单的检索命令[^5]。 #### 7. 组合各组件形成完整的应用程序流程 最后一步就是把前面所做的一切结合起来构成整个系统的运作机制。对于 WinForms 来说意味着要在 UI 上触发事件时调用 BLL 提供的功能进而间接影响到底层的数据变化过程。以下是如何在一个按钮点击事件处理器里边集成这一切的方式之一: ```csharp private async Task LoadAllProductsAsync(object sender, EventArgs e) { try { var productService = new BusinessLogicLayer.ProductService(new DataAccessLayer.DbContextBase()); dataGridView.DataSource = await Task.Run(() => productService.GetAllProducts()); } catch(Exception ex) { MessageBox.Show($"Error occurred while loading products: {ex.Message}"); } } ``` 以上即为一种可能的应用模式,当然还可以根据实际情况调整优化各个方面的细节[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值