我正在尝试使用grid
以下是我用于获取网格中productId
的代码:
Dim prodId = From row As DataRow _
In grdSale.Rows _
Where row.Item(0).ToString <> "" _
Select row.Item(0)
我正确地获得了productid
。以下是获取QTY
列productId
中的值的代码:
For Each id As Long In prodId
Dim intpdt As Long
intpdt = id
intQty = (From row As DataRow In grdSale.Rows Where _
row.Item(0).Equals(intpdt) _
Select row.Item("QTY")).FirstOrDefault()
Next
在intQty
我得到0
,但它应该是10
或12
,正如您在网格中QTY
列中看到的那样Enumeration yielded no results
1}})。
哪里错了?
答案 0 :(得分:1)
尝试这样做,看看你是否得到了预期的结果:
intQty = _
( _
From row As DataRow In grdSale.Rows Where _
CLng(row.Item(0)) = intpdt _
Select CInt(row.Item("QTY")) _
).FirstOrDefault()
答案 1 :(得分:1)
不确定导致问题的原因,但您应该使用Field
扩展方法,因为它是强类型的,并且支持可空类型。我也不明白为什么你需要额外的循环和查询来查找每个产品的数量。这应该做到两个:
Dim prodQTYs = From row In grdSale.Rows.Cast(Of DataRow)()
Let ProductID = row.Field(Of String)("ProductId")
Let Quantity = row.Field(Of Long)("QTY")
Where Not String.IsNullOrWhiteSpace(ProductID)
Select New With {.ProductID = ProductID, .Quantity = Quantity}
将类型更改为适当的类型。
输出:
For Each prodInfo In prodQTYs
Console.WriteLine("Product:{0} Quantity:{1}", prodInfo.ProductID, prodInfo.Quantity)
Next