You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化C# WinForm中MySQL与DataGridView的CRUD实现?

简化C# WinForm中MySQL DataGridView的CRUD实现逻辑

核心精简方向

用轻量的BindingSource替代DataSet做数据中转,合并重复的查询/绑定逻辑,让CRUD操作更直观简洁。


1. 全局变量精简

只保留必要的适配器和绑定源,去掉冗余的DataSet:

private MySqlDataAdapter _dataAdapter;
private readonly BindingSource _bindingSource = new BindingSource();
// 替换为你的数据库连接字符串
private readonly string _connString = "server=localhost;database=myDB;uid=root;pwd=your_password;";

2. 通用数据加载方法

把查询、填充、绑定逻辑封装成一个方法,默认加载全表数据,支持传入自定义筛选SQL:

private void LoadPersonData(string sql = "SELECT * FROM person")
{
    using var conn = new MySqlConnection(_connString);
    _dataAdapter = new MySqlDataAdapter(sql, conn);
    // 自动生成增删改命令,无需手动写SQL
    _ = new MySqlCommandBuilder(_dataAdapter);
    
    var dataTable = new DataTable();
    _dataAdapter.Fill(dataTable);
    
    _bindingSource.DataSource = dataTable;
    // 注意:你的DataGridView控件名是dt,建议改成dgvPerson避免变量名冲突
    dt.DataSource = _bindingSource;
}

// 窗体加载时初始化数据
private void Form_Load(object sender, EventArgs e)
{
    LoadPersonData();
}

3. 筛选按钮极简实现

三个筛选按钮直接调用通用方法,传递对应条件的SQL即可,无需重复写连接、填充逻辑:

// 示例:年龄大于30的筛选
private void btnFilterAge_Click(object sender, EventArgs e)
{
    LoadPersonData("SELECT * FROM person WHERE age > 30");
}

// 示例:性别为男的筛选
private void btnFilterMale_Click(object sender, EventArgs e)
{
    LoadPersonData("SELECT * FROM person WHERE gender = '男'");
}

// 示例:已离职人员筛选
private void btnFilterResigned_Click(object sender, EventArgs e)
{
    LoadPersonData("SELECT * FROM person WHERE is_resigned = 1");
}

4. 保存操作简化

直接依托BindingSource和DataAdapter完成更新,无需手动跟踪数据变化:

private void btnSave_Click(object sender, EventArgs e)
{
    try
    {
        // 结束当前编辑,确保所有DataGridView的修改提交到数据源
        _bindingSource.EndEdit();
        // 把数据源的变更同步到数据库
        _dataAdapter.Update((DataTable)_bindingSource.DataSource);
        MessageBox.Show("保存成功");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"保存失败:{ex.Message}");
    }
}

额外优化建议

  • 把DataGridView控件名从dt改成dgvPerson,避免和代码中的DataTable变量名混淆,提升可读性
  • 可以把连接字符串配置到App.config中,方便后续修改

内容的提问来源于stack exchange,提问作者ThereIsHope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:55:12