Суммирование строк в 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))

Я не думаю, что это любит пробелы.

Другие вопросы по тегам