C# WinForm中如何通过按钮删除二维数组指定行
C# WinForm 二维数组指定行删除实现
实现思路
C#固定长度二维数组不支持直接删除元素,在不使用List<>、网格控件的前提下,通过数据前移覆盖的方式实现删除效果,流程如下:
- 校验输入:先判断用户输入的行号是否为合法整数,再校验行号是否落在已存数据的有效区间内,非法输入直接弹出警告
- 覆盖数据:从待删除行位置开始,将后续每一行的所有列数据逐列复制到前一行,完成数据前移,同时修正行号保证序号连续
- 清理尾部:将数组最后一条冗余的旧数据清空,同步更新有效数据的行计数
- 刷新界面:重新遍历数组渲染列表、计算总金额,和新增数据的展示规则保持一致
补全的button2点击事件代码
private void button2_Click(object sender, EventArgs e) { int deleteRowIndex; // 校验输入是否为合法整数,此处textBox6为接收行号输入的文本框,按你实际控件名替换即可 if (!int.TryParse(textBox6.Text.Trim(), out deleteRowIndex)) { MessageBox.Show("请输入有效的数字行号", "输入错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox6.Focus(); return; } // 校验行号是否存在:有效行下标范围为0 ~ pos-1 if (deleteRowIndex < 0 || deleteRowIndex >= pos) { MessageBox.Show("指定行不存在,请输入正确的行号", "操作失败", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox6.Focus(); return; } // 逐行前移,覆盖待删除行 for (int i = deleteRowIndex; i < pos - 1; i++) { for (int col = 0; col < 5; col++) { sales[i, col] = sales[i + 1, col]; } // 重写当前行号,保证序号连续 sales[i, 0] = i.ToString(); } // 清空尾部冗余数据,更新有效行计数 for (int col = 0; col < 5; col++) { sales[pos - 1, col] = null; } pos--; // 刷新列表展示和总金额 textBox5.Clear(); double total = 0; for (int i = 0; i < sales.GetLength(0); i++) { // 只渲染有数据的行,避免空行 if (sales[i, 0] == null) continue; textBox5.Text += $"{sales[i,0]} {sales[i,1]} {sales[i,2]} {sales[i,3]} {sales[i,4]}\r\n"; if (sales[i,4] != null) { total += double.Parse(sales[i,4]); } } textBox4.Text = total.ToString(); // 清空输入框,聚焦等待下次输入 textBox6.Clear(); textBox6.Focus(); }
说明
- 代码中默认接收行号输入的控件名为
textBox6,如果你的项目中行号输入框命名不同,直接替换为对应控件ID即可 - 原新增逻辑计算总金额时使用
int.Parse转换金额,会丢失小数精度,上述代码改为double.Parse适配小数金额场景,如果你的业务无小数金额需求,可直接改回原写法 - 删除操作后会自动重排行号,不会出现序号断层,展示逻辑和新增数据时完全一致
内容的提问来源于stack exchange,提问作者Erasmo Juarez
相关产品推荐
相关产品推荐

