>我有一个从数据库查询填充的数据表对象。
我正在尝试使用此函数实现总计行
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
添加方括号无济于事。
我也尝试添加'字符,但这不起作用
在.Compute
表达式中,CONVERT
函数在SUM
聚合中被调用。SUM
聚合函数需要一个简单的列名,而不是表达式。
http://msdn.microsoft.com/en-us/library/system.data.datatable.compute(v=vs.100).aspx
我正在使用数据表并遇到了同样的问题。我正在使用:
dataTableNew.Columns.Add("Tax Rate", GetType(System.Double))
一旦我用下划线替换空格,它就起作用了:
dataTableNew.Columns.Add("Tax_Rate", GetType(System.Double))
我认为它不喜欢空间。