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

C# WinForms点击按钮如何递增DataGridView对应行计数而非新增行

解决方案:实现点击按钮递增对应项计数而非新增行

你可以修改btnBread_Click方法的逻辑,先检查DataTable中是否已存在对应面包且餐桌为1的记录,存在则直接递增数量,不存在再新增行。同时不需要单独维护bread变量,直接从DataTable的行数据中取值更不容易出错:

int bread = 0;
DataTable dt = new DataTable();
DataRow dr;

private void Form1_Load(object sender, EventArgs e)
{
    dt.Columns.Add("Food");
    dt.Columns.Add("Amount", typeof(int)); // 明确指定列类型为int,避免类型转换问题
    dt.Columns.Add("Table", typeof(int));
}

private void btnBread_Click(object sender, EventArgs e)
{
    // 查询是否已存在面包(Food等于按钮文本)且Table为1的行
    DataRow[] existingRows = dt.Select($"Food = '{btnBread.Text}' AND Table = 1");
    
    if (existingRows.Length > 0)
    {
        // 存在则递增Amount值
        DataRow targetRow = existingRows[0];
        targetRow["Amount"] = (int)targetRow["Amount"] + 1;
    }
    else
    {
        // 不存在则新增一行,计数初始化为1
        dr = dt.NewRow();
        dr["Food"] = btnBread.Text;
        dr["Amount"] = 1;
        dr["Table"] = 1;
        dt.Rows.Add(dr);
    }
    
    // 如果你的DataTable绑定了DataGridView等控件,需要刷新显示
    // dataGridView1.DataSource = null;
    // dataGridView1.DataSource = dt;
}

关键说明:

  • 初始化DataTable列时明确指定Amount和Table的类型为int,避免后续类型转换异常
  • 使用DataTable.Select()方法精准定位目标行,查询条件匹配食物名称和餐桌编号
  • 不再依赖独立的bread变量,直接从DataRow中读取和修改计数,保证数据一致性
  • 如果DataTable绑定了UI控件(比如DataGridView),修改数据后需要重新绑定或刷新控件以更新显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:52:10