【问题标题】:Function does not read last value函数不读取最后一个值
【发布时间】: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


【解决方案1】:

假设您的DataTable 填写正确,您还有另外两个选择来获得总和。

  1. 使用旧的 DataTable.Compute 方法,它也适用于 .NET
  2. 使用Linq-To-DatSet,它是Enumerable.Sum

1)

Dim Sum = CType(table.Compute("Sum(ColumnName)", Nothing), Double)

2)

Dim Sum = table.AsEnumerable().
                Sum(Function(row)row.Field(Of Double)("ColumnName"))

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多