Рейтинг:
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
да это проблема слава богу теперь я могу разобраться в ней
я меняю "." на "," и он работает и переходит к следующему значению
теперь мне нужно установить, что "," быть "."
любая идея, как я могу это сделать, пожалуйста