Member 14207792 Ответов: 2

У меня есть трудности, когда я делаю сумму столбца в datagrid также в datatable


у меня есть трудности, когда я делаю сумму столбца в datagrid также в datatable
у меня есть 4 столбца в datatable, когда я делаю сумму в столбце Qte, она идет нормально (целочисленный тип)
для колонки "PU"(двойной тип) она идет с ошибкой

пожалуйста помочь

Что я уже пробовал:

Dim sum As Double

       sum = dt.Compute("SUM(PU)", "")

       MsgBox(sum)

Member 14207792

ошибка, когда я выполняю это
"Использование номера валиде-де-ла обивкой из Д'agrégation сумме() et-дю-тип : строка.'"

 Dim sum As Object

        sum = dt.Compute("Sum(PU)", "")

        MsgBox(sum.ToString)

Richard MacCutchan

Сообщение об ошибке предполагает, что "PU" не является числовым столбцом.

Member 14207792

что же мне делать

2 Ответов

Рейтинг:
2

Richard MacCutchan

Вы должны объявить тип данных столбца, чтобы функция SUM понимала эти данные. Добавьте следующую строку в определение dataTable:

DataColumn dtc = dt.Columns["PU"];
dtc.DataType = System.Type.GetType("System.Double");


Member 14207792

когда я пытаюсь добавить тип данных в столбец у меня возникает ошибка

  dt.Columns.Add("PU", GetType(Double))


{'Ле формате-де-ла-Шен д'entrée есть неправильные.Impossible de stocker <71.84> dans la colonne PU. Attendu типа есть двойной'.}

Richard MacCutchan

С вашими данными что-то не так, но мы этого не видим.

Richard MacCutchan

Вы добавляете данные столбца в виде текстовых строк. Сначала вы должны преобразовать его в двойные значения.

Member 14207792

только строка, которая работает с колонкой "PU"
я пробовал Int32 и double всегда одна и та же ошибка
{'Ле формате-де-ла-Шен д'entrée есть неправильные.Impossible de stocker <71.84> dans la colonne PU. Attendu типа есть двойной'.
}

Member 14207792

это похоже на то, что в textfile это было трудно для меня

Richard MacCutchan

Вам нужно узнать разницу между строками и числами.

Member 14207792

может быть

Member 14207792

я все проверил и никакого солтуйона
я попытался удалить номер после точки и это сработало
так что же я могу сделать в этом случае

Richard Deeming

На первый взгляд, ваш компьютер настроен на культуру, которая использует "," в качестве десятичного разделителя, но данные, которые вы пытаетесь импортировать, используются "." вместо этого?

Member 14207792

данные, которые я импортирую, используют "."
и как настроить компьютер на использование "," или "."

Richard Deeming

Для .NET 4.5 или выше:
CultureInfo.Свойство DefaultThreadCurrentCulture (System.Глобализация) | Microsoft Docs[^]

Это настроит ваше приложение на "инвариантную" культуру, которая фактически является американским английским языком:

CultureInfo culture = CultureInfo.InvariantCulture;

CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;

Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;

Richard MacCutchan

Я не думаю, что в этом есть какое-то "может быть". Если вы не понимаете, как импортировать текстовое представление числа и преобразовать его в соответствующее компьютерное числовое значение, то вы столкнетесь со многими проблемами.

Richard MacCutchan

См.предложение Ричарда Диминга выше.

OriginalGriff

Лучше всего не использовать операции приведения, а вместо этого использовать TryParse, который позволяет указать культуру, в которой будет ожидаться число:
https://docs.microsoft.com/en-us/dotnet/api/system.double.tryparse?view=netframework-4.8#System_Double_TryParse_System_String_system_globalization_numberstyles_system_iformatprovider_system_double__

Member 14207792

я до сих пор не разрешил его всегда требовать быть "," не "."

Рейтинг:
0

OriginalGriff

Начните с того, что вернитесь к своему источнику данных и посмотрите на сохраненные необработанные данные: в сообщении об ошибке ясно говорится: "Вы не можете использовать функцию агрегации для строки".
Это означает, что все данные PU хранятся в виде строки, а не числа, и вам нужно преобразовать их в число, чтобы суммировать значения.

Я настоятельно рекомендую вам начать с исходных данных, и если это база данных, измените ее: всегда храните значения в соответствующих столбцах типа данных: строки предназначены только для строковых данных, таких как имена, адреса, мобильные телефоны, электронная почта ... Даты должны быть в DateTime, числа должны быть в int, float, double или decimal.
Все строки могут показаться легким путем, но это вызывает у вас гораздо больше головной боли позже ... особенно когда кто-то вводит неверные числа или даты, потому что, когда вы пытаетесь использовать их, уже слишком поздно исправлять проблему ввода.


Member 14207792

спасибо за помощь

я получаю этот столбец, где у меня есть ошибка, из текстового файла и текстового файла, преобразованного из excel и excel from (pdf facture введен вручную)это источник
теперь у меня должна быть сумма этого столбца("PU")
ДТ.колонны.Добавить("PU")
это, как я добавить столбец ПУ без параметра метод gettype

OriginalGriff

Поэтому, когда вы читаете текстовый файл, вы преобразуете столбцы в соответствующие типы данных, а не просто рассматриваете их как строку.

Member 14207792

да именно я преобразовал его во многом в дубль а когда выполнил сумму никакого результата

OriginalGriff

И когда вы преобразовали его, что вы сделали с преобразованными значениями?

Member 14207792

шаг fisrt я преобразую тип столбца непосредственно в double и выдает мне ошибку говорит что данные не могут быть двойными как

Nrow("PU") = CDbl(TxtVals(3))

ошибка есть
{ 'Преобразования ла-де-ла-Шен "8.24- en type 'Double' n'est pas valide.}

OriginalGriff

Используйте отладчик и выясните, почему: 8.24-это допустимое двойное значение, поэтому фактическая строка, которую вы преобразуете, должна включать символы, которые не являются числовыми или десятичными точками, или культурные настройки ПК настроены на использование символов, отличных от". " в качестве десятичного разделителя.

Member 14207792

да это проблема слава богу теперь я могу разобраться в ней
я меняю "." на "," и он работает и переходит к следующему значению
теперь мне нужно установить, что "," быть "."
любая идея, как я могу это сделать, пожалуйста