对DataTable中的行求和,期望具有可能的'Child'限定符的单个列参数

时间:2012-09-24 10:57:09

标签: vb.net datatable sum datarow datacolumn

我有一个数据表对象,它是从数据库查询填充的。

我正在尝试使用此功能

来实现总计行
Public Function getDataTable(data) As DataTable

    Dim theTable As New DataTable()
    theTable.Columns.Add(New DataColumn("Location"))
    theTable.Columns.Add(New DataColumn("Total Sales"))
    theTable.Columns.Add(New DataColumn("VAT"))
    theTable.Columns.Add(New DataColumn("Refunds"))
    theTable.Columns.Add(New DataColumn("VAT refund"))
    theTable.Columns.Add(New DataColumn("Total VAT"))
    theTable.Columns.Add(New DataColumn("Turnover"))
    theTable.Columns.Add(New DataColumn("Turnover Net"))
    ' Location, Sale value, VAT, Refund, VAT refund, Total Vat, Turnover (Gross) 

    For Each ele In data
        Dim thisRow As DataRow = theTable.NewRow()
        thisRow.Item("location") = ele("name")
        thisRow.Item("Total Sales") = "£" & FormatNumber(ele("totalSales"), 2)
        thisRow.Item("VAT") = "£" & FormatNumber(ele("totalVat"), 2)
        thisRow.Item("Refunds") = "£" & FormatNumber(ele("refundTotal"), 2)
        thisRow.Item("VAT refund") = "£" & FormatNumber(ele("vatRefunded"), 2)
        thisRow.Item("Total VAT") = "£" & FormatNumber((ele("totalVat") - ele("vatRefunded")), 2)
        thisRow.Item("Turnover") = "£" & FormatNumber(ele("netSales"), 2)
        thisRow.Item("Turnover Net") = "£" & FormatNumber((ele("netSales") - ele("totalVat")), 2)
        theTable.Rows.Add(thisRow)
    Next

    Dim totalRow = theTable.NewRow
    For Each col As DataColumn In theTable.Columns
        If col.ColumnName <> "Location" Then
            Try
                totalRow(col.ColumnName) = Convert.ToDouble(theTable.Compute("SUM(CONVERT([" & col.ColumnName & "], CHAR(64)))", Nothing).ToString)
            Catch ex As Exception
                totalRow(col.ColumnName) = "grr"
            End Try
        Else
            totalRow("Location") = "Total"
        End If
    Next
    theTable.Rows.Add(totalRow)

    Return theTable
End Function

如您所见,我们正在创建一个包含8列的表,第一列是位置名称,其余为数字。我正在使用简单的if子句跳过“位置”行的求和。

我不断收到此错误:

Expecting a single column argument with possible 'Child' qualifier.

我读了几篇文章,但似乎没有解决它。

我认为列名中的空格可能是个问题,本文建议:

http://forums.asp.net/t/1341960.aspx/1

添加方括号无济于事。

我也尝试过添加`字符,但这不起作用

2 个答案:

答案 0 :(得分:2)

.Compute表达式中,CONVERT聚合内部正在调用SUM函数。 SUM聚合函数需要一个简单的列名,而不是表达式。

http://msdn.microsoft.com/en-us/library/system.data.datatable.compute(v=vs.100).aspx

答案 1 :(得分:0)

我正在使用数据表并遇到同样的问题。我正在使用:

dataTableNew.Columns.Add("Tax Rate", GetType(System.Double))

一旦我用下划线替换了空间,它就起作用了:

dataTableNew.Columns.Add("Tax_Rate", GetType(System.Double))

我不认为它喜欢空格。