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

如何用单个绑定TextBox批量修改DataGridView选中行对应DataTable列值

实现多选中行同步更新方案

问题原因

默认BindingSource仅会同步其Current属性指向的当前项,多选DataGridView行时,Current项为最后一条选中的行,因此默认绑定逻辑仅会更新该行。

实现步骤

不需要修改原有绑定代码,只需新增TextBox的提交事件监听,多选时批量更新所有选中行即可:

  1. 订阅TextBox的Validated事件(输入完成失去焦点时触发,也可根据需求替换为TextChanged实现实时同步)
  2. 事件处理逻辑中遍历所有选中行,批量赋值对应列

完整代码示例

事件订阅(可在窗体构造方法或Filling方法中添加)

txtData.Validated += TxtData_Validated;

事件处理方法

private void TxtData_Validated(object sender, EventArgs e)
{
    // 单选场景走原有默认绑定逻辑即可
    if (dgvMain.SelectedRows.Count <= 1)
        return;

    // 从已有的绑定配置中自动获取绑定的列名,无需硬编码
    var textBinding = txtData.DataBindings[nameof(TextBox.Text)];
    if (textBinding == null)
        return;
    string targetColumn = textBinding.BindingMemberInfo.BindingField;
    object newValue = txtData.Text;

    // 遍历所有选中行批量赋值
    foreach (DataGridViewRow row in dgvMain.SelectedRows)
    {
        // 跳过DataGridView的空白新增行(如果开启了允许用户添加行功能需要保留该判断)
        if (row.IsNewRow)
            continue;
        
        if (row.DataBoundItem is DataRowView drv)
        {
            drv[targetColumn] = newValue;
        }
    }
}

注意事项

  • 赋值操作直接作用于绑定的DataRowView,会自动同步到对应的DataTable和DataGridView UI,无需额外调用刷新方法
  • 该方案完全兼容原有单选场景的绑定逻辑,无侵入性
  • 若绑定的列不是字符串类型,可根据实际类型对newValue做对应类型转换即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:36:04