C# Winform 实现DataGridView选中行添加到另一表重复选择累加数量
实现方案
你现有代码的核心问题是没有提前校验目标控件中是否已存在相同商品,每次选中都会直接新增行,所以不会触发数量累加。调整后的代码如下:
private void Dgtv_artikelbestellung_CellClick(object sender, DataGridViewCellEventArgs e) { // 仅点击"+"号列时触发逻辑,替换为你实际的"+"号列索引 if (e.ColumnIndex != 你的加号列索引 || e.RowIndex < 0) return; if (Dgtv_artikelbestellung.SelectedRows.Count <= 0) return; foreach (DataGridViewRow selectedRow in Dgtv_artikelbestellung.SelectedRows) { // 提取当前选中商品的唯一标识,这里以第一列为例,可按需调整为对应列名/索引 string currentArtikelId = selectedRow.Cells[0].Value?.ToString(); bool isExist = false; // 遍历已选商品列表匹配重复项 foreach (DataGridViewRow existRow in dgv_bestellteArtikel.Rows) { // 跳过DataGridView默认的空新行 if (existRow.IsNewRow) continue; string existArtikelId = existRow.Cells[0].Value?.ToString(); if (existArtikelId == currentArtikelId) { // 匹配到重复商品则直接累加数量 int currentMenge = Convert.ToInt32(existRow.Cells["Menge"].Value ?? 0); existRow.Cells["Menge"].Value = currentMenge + 1; isExist = true; break; } } // 无重复商品时新增行 if (!isExist) { int newRowIndex = dgv_bestellteArtikel.Rows.Add(); dgv_bestellteArtikel.Rows[newRowIndex].Cells[0].Value = selectedRow.Cells[0].Value.ToString(); dgv_bestellteArtikel.Rows[newRowIndex].Cells[1].Value = selectedRow.Cells[1].Value.ToString(); dgv_bestellteArtikel.Rows[newRowIndex].Cells["Menge"].Value = 1; } } }
注意事项
- 若你判定商品重复的依据不是第一列,可自行调整
Cells[0]为对应列的索引或者列名 - 代码已做空值兼容处理,避免空值触发运行时报错
内容的提问来源于stack exchange,提问作者Adnan Ibrahim
相关产品推荐
相关产品推荐

