随笔9. 从一个 DataGridView 的行中筛选出满足特定条件的行,并将这些行存储在一个集合中。

85 阅读2分钟

这段代码是用来从一个 DataGridView 的行中筛选出满足特定条件的行,并将这些行存储在一个集合中。让我们逐步解析这段代码。

代码解析

Dim list = grdList.Rows.OfType(Of DataGridViewRow) _
    .Where(Function(x) Convert.ToString(x.Cells(Grd_SeihinCd.Index).Value) = productCode AndAlso _
                      Convert.ToDecimal(x.Cells(Grd_LotNo.Index).Value) = lotNo)

1. Dim list =

  • 这行代码声明了一个变量 list,用于存储筛选后的结果。

2. grdList.Rows

  • grdList 是一个 DataGridView 控件,Rows 属性返回一个包含所有行的集合。

3. OfType(Of DataGridViewRow)

  • OfType 是 LINQ 的一个扩展方法,用于筛选集合中指定类型的元素。在这里,它用于确保 Rows 集合中的每个元素都是 DataGridViewRow 类型。

4. .Where(Function(x) ...)

  • Where 是 LINQ 中的一个方法,用于根据指定的条件筛选集合中的元素。
  • Function(x) 定义了一个匿名函数,x 代表 DataGridViewRow 类型的每一行。

5. Convert.ToString(x.Cells(Grd_SeihinCd.Index).Value)

  • x.Cells(Grd_SeihinCd.Index).Value 获取当前行中,索引为 Grd_SeihinCd 的单元格的值。
  • Convert.ToString(...) 将这个值转换为字符串。

6. = productCode

  • 这部分检查单元格的字符串值是否等于变量 productCode

7. AndAlso

  • AndAlso 是逻辑与操作符,用于在两个条件都为 True 时返回 True。它的短路特性意味着如果第一个条件为 False,则不会计算第二个条件。

8. Convert.ToDecimal(x.Cells(Grd_LotNo.Index).Value)

  • Convert.ToDecimal(...) 将当前行中,索引为 Grd_LotNo 的单元格的值转换为十进制数。

9. = lotNo

  • 这部分检查单元格的十进制值是否等于变量 lotNo

总结

整段代码的作用是: 从 grdList 的所有行中筛选出那些满足以下条件的行:

  • 该行的 Grd_SeihinCd 单元格的值与 productCode 相等。
  • 该行的 Grd_LotNo 单元格的值与 lotNo 相等。

最终,符合条件的行会被存储在 list 变量中。list 的类型为 IEnumerable(Of DataGridViewRow),可以进一步处理或遍历。