Суммирование строк в DataTable, ожидание одного аргумента столбца с возможным квалификатором 'Child'
У меня есть объект данных, который заполняется из запроса к базе данных.
Я пытаюсь достичь итоговой строки с помощью этой функции
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 столбцами, первый из которых является именем местоположения, а остальные - числами. Я пропускаю суммирование строки "location" простым if
пункт.
Я продолжаю получать эту ошибку, хотя:
Expecting a single column argument with possible 'Child' qualifier.
Я прочитал несколько постов, но, похоже, ничего не решает.
Я думал, что пробелы в именах моих столбцов могут быть проблемой, эта статья предложила так:
http://forums.asp.net/t/1341960.aspx/1
Добавление квадратных скобок не помогает.
Я также попытался добавить символы `, но это не работает
2 ответа
В .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))
Я не думаю, что это любит пробелы.