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

Windows Forms中如何将DataGridView新增行保存到MDF数据库

实现Windows Forms DataGridView新增行自动保存到MDF数据库

核心思路调整

你当前用RowLeave事件的思路方向没问题,但要实现最后一列按Tab后自动保存,更精准的方式是用CellLeave事件,结合判断当前单元格是否为最后一列、当前行是否为已输入内容的新增行,避免不必要的保存触发。

具体实现步骤

1. 绑定正确的事件

将保存方法绑定到DataGridView的CellLeave事件(替代原RowLeave),可以通过窗体设计器属性窗口操作,或者在frmCursanti_Load中手动添加绑定代码:

private void frmCursanti_Load(object sender, System.EventArgs e)
{
    this.cursantiTableAdapter.Fill(this.colibriDataSet.Cursanti);
    // 手动绑定CellLeave事件
    dgvCursanti.CellLeave += SaveToCursantiTable;
}

2. 修改保存逻辑

更新SaveToCursantiTable方法,增加条件判断,确保仅在最后一列编辑完成且是已输入内容的新增行时执行保存:

private void SaveToCursantiTable(object sender, DataGridViewCellEventArgs e)
{
    // 判断是否是最后一列,且当前行不是DataGridView的临时空行(已输入内容)
    if (e.ColumnIndex == dgvCursanti.Columns.Count - 1 && !dgvCursanti.Rows[e.RowIndex].IsNewRow)
    {
        try
        {
            // 验证当前控件输入合法性
            this.Validate();
            // 结束BindingSource编辑状态,将数据提交到DataSet
            this.cursantiBindingSource.EndEdit();
            // 将DataSet的变更同步到数据库(自动识别新增/修改/删除操作)
            int affectedRows = this.cursantiTableAdapter.Update(this.colibriDataSet.Cursanti);
            if (affectedRows > 0)
            {
                MessageBox.Show("新增行保存成功!");
                // 可选:若表有自增主键,刷新DataGridView显示数据库生成的主键值
                this.cursantiTableAdapter.Fill(this.colibriDataSet.Cursanti);
            }
        }
        catch (System.Exception ex)
        {
            MessageBox.Show($"保存失败:{ex.Message}");
        }
    }
}

3. 关键细节说明

  • 最后一列判断:e.ColumnIndex == dgvCursanti.Columns.Count -1确保只有在最后一个单元格编辑完成后触发保存。
  • 新增行判断:!dgvCursanti.Rows[e.RowIndex].IsNewRow排除DataGridView默认的临时空行(用户未输入内容时的占位行),只处理已输入内容的有效新增行。
  • TableAdapter Update方法:该方法会自动根据colibriDataSet.Cursanti中数据行的RowState(Added/Modified/Deleted)执行对应的SQL操作,无需手动编写插入语句。
  • 自增主键刷新:如果你的Cursanti表包含自增主键,保存后重新调用Fill可以让DataGridView显示数据库生成的主键值。

4. 常见问题排查

  • 若保存无报错但数据库无数据:检查TableAdapter是否正确生成了Insert命令,可通过DataSet设计器右键点击TableAdapter,选择“配置”查看自动生成的SQL语句。
  • 确保colibriDataSet的Cursanti表结构与数据库表完全一致,避免字段类型、长度不匹配导致的静默失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:17:31