如何将数组数值元素与GridView单元格值进行匹配?
问题分析与修复方案
几个关键问题导致代码未生效
- 匹配数组未赋值:你仅创建了长度为100的
matchN数组,但所有元素默认值为0。若GridView中没有0值,自然不会触发匹配,需先填充目标匹配数值。 - 数组遍历范围错误:
kw从1开始循环,跳过了数组索引0的元素,应改为从0开始遍历至matchN.Length - 1。 - 未处理索引越界风险:
OneRank.Value若超出GridView的行索引范围,会直接抛出异常中断代码,需先判断索引合法性。 - 提示文本硬编码:固定写死"Number 5",无法体现实际匹配的数值,需动态替换。
修复后的完整代码
// 先给匹配数组填充目标数值(示例填充1-100,替换为你需要的数值) int[] matchN = new int[100]; for (int i = 0; i < matchN.Length; i++) { matchN[i] = i + 1; } foreach (KeyValuePair<double, int> OneRank in MyRank) { // 检查行索引是否在GridView范围内,避免报错 if (OneRank.Value >= 0 && OneRank.Value < GridView1.Rows.Count) { int gridNum; // 安全转换单元格文本为整数,防止非数字文本导致报错 if (int.TryParse(GridView1.Rows[OneRank.Value].Cells[2].Text, out gridNum)) { // 遍历数组所有元素(从索引0开始) for (int kw = 0; kw < matchN.Length; kw++) { if (gridNum == matchN[kw]) { // 动态显示匹配结果,添加换行让消息更清晰 TextBox2.Text += $"匹配成功:数值{gridNum}在第2列\r\n"; // 若需匹配一次就停止当前行检查,可在此添加break; } } } } }
额外优化:简化匹配逻辑
无需逐个遍历数组,使用Array.Exists可直接判断值是否存在于数组中,代码更简洁:
foreach (KeyValuePair<double, int> OneRank in MyRank) { if (OneRank.Value >= 0 && OneRank.Value < GridView1.Rows.Count) { int gridNum; if (int.TryParse(GridView1.Rows[OneRank.Value].Cells[2].Text, out gridNum) && Array.Exists(matchN, num => num == gridNum)) { TextBox2.Text += $"匹配成功:数值{gridNum}在第2列\r\n"; } } }
内容的提问来源于stack exchange,提问作者user20465780
相关产品推荐
相关产品推荐

