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

如何在button_click事件中修改DataTable选中行数量并同步更新DataGridView

实现方案

步骤1:调整BindingSource作用域

你当前在mainForm_Load中定义的SBind是局部变量,按钮点击事件中无法访问,需要调整为窗体类的全局成员:
在你的主窗体类内部、方法外声明:

// 窗体全局绑定源对象
private BindingSource _toolBindingSource;

然后修改mainForm_Load中的绑定源初始化代码,把原来的BindingSource SBind = new BindingSource();替换为:

_toolBindingSource = new BindingSource();
_toolBindingSource.DataSource = tooldataSet.Tables["Tool"];

对应的DataGridView绑定代码也要同步修改:

toolDataGridView.DataSource = _toolBindingSource;

步骤2:编写按钮点击事件逻辑

直接修改绑定源当前选中行对应的DataRow值即可,.NET的绑定机制会自动同步更新DataGridView和所有绑定到该数据源的文本框,不需要手动刷新控件:

private void updateQtyButton_Click(object sender, EventArgs e)
{
    // 校验是否有选中行
    if (_toolBindingSource.Current == null)
    {
        MessageBox.Show("请先选中要修改的工具行");
        return;
    }

    // 获取选中行对应的DataRow
    DataRowView selectedRowView = (DataRowView)_toolBindingSource.Current;
    DataRow selectedRow = selectedRowView.Row;

    try
    {
        // 示例逻辑:将现有库存OnHand加1,可根据你的需求替换为自定义修改逻辑
        // 如果要读取用户输入的数值,直接替换为Convert.ToInt32(你的输入框.Text)即可,建议提前加输入合法性校验
        int currentOnHand = Convert.ToInt32(selectedRow["OnHand"]);
        selectedRow["OnHand"] = currentOnHand + 1;

        // 同步更新OrderQty,和你初始化的计算逻辑保持一致
        int stockQty = Convert.ToInt32(selectedRow["StockQty"]);
        int updatedOnHand = Convert.ToInt32(selectedRow["OnHand"]);
        selectedRow["OrderQty"] = Math.Max(stockQty - updatedOnHand, 0);
    }
    catch (Exception ex)
    {
        MessageBox.Show($"修改数量失败:{ex.Message}");
    }
}

补充说明

  • 所有绑定到该_toolBindingSource的控件(包括DataGridView、你绑定的文本框)都会在DataRow值修改后自动同步更新,无需额外调用刷新方法。
  • 如果需要将修改后的数据持久化回JSON文件,只需要遍历tooldataSet.Tool的所有行,序列化为JSON后写入原文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:27:04