0

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

我正在尝试使用此功能实现总计行

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

添加方括号没有帮助。

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

4

2 回答 2

2

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

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

于 2012-12-06T00:26:59.367 回答
0

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

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

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

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

我不认为它喜欢空格。

于 2017-05-11T23:30:55.700 回答