【发布时间】:2012-07-17 12:23:17
【问题描述】:
我正在为连锁餐厅开发一个程序,他们通常应该能够通过连接到 dbf 文件的 vb.net 应用程序来计算他们的客人数量和销售额。 我的数据集和我的数据表一样正确填写(通过填写 datarowview = 正确数据进行检查) 但是后来我遇到了一个问题,在我使用数据表的所有函数中,数据表都会跳过最终值,在这种情况下,它是一个月的所有值,所以它要么跳过 31 天,要么跳过第 30 天。 尝试了一段时间,尝试了每个,调试了很多(我发现它是最后一个值)。但是现在我不知道为什么函数不使用最后一个值
Public Function Getgctakeout(ByVal i_table As DataTable)
table = i_table
i = 0
gctakeout = 0
For Each row As DataRow In i_table.Rows
gctakeout = gctakeout + Convert.ToDouble(row(4))
Next row
'MessageBox.Show(gctakeout)
Return gctakeout
End Function
该函数不使用最后一行的值来计算gctakeout
以主的名义有什么不对:)
【问题讨论】:
-
你的代码看起来不错,
For Each应该确保每一行都被迭代。调试时不会遍历表中的最后一行吗? -
这段代码没有错。唯一可能的原因是传入的 i_table。在循环之前检查 i_table.Rows.Count。空值也可能触发异常。
-
我不同意早期的 cmets,因为我认为这段代码看起来不太好。最后返回总和时,为什么要使用类成员变量进行计算?您还缺少函数的返回类型。总而言之,这个函数看起来可能会产生很多“副作用”,尤其是如果您的应用程序中有任何并发。
-
您是否尝试过使用
Next而不是Next row。不确定,只是猜测。
标签: vb.net for-loop datatable dataset dataview