我有一个数据表对象,它是从数据库查询填充的。
我正在尝试使用此功能
来实现总计行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
添加方括号无济于事。
我也尝试过添加`字符,但这不起作用
答案 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))
我不认为它喜欢空格。