Суммирование столбца в CRDBGrid

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
Закрыто
Skromny
Сообщения: 6
Зарегистрирован: Вс 06 янв 2013 21:23

Суммирование столбца в CRDBGrid

Сообщение Skromny » Вс 06 янв 2013 21:33

Здравствуйте.
Подскажите, пожалуйста, как сделать, чтоб в компоненте CRDBGrid внизу отображалась сумма значений столбца. В свойствах OptionsEx выставляю dgeRecordCount=false, dgeSummary=true. В Columns выбираю числовое поле и в его свойствах ставлю FloatDigits=3, FloatFormat=ffFixed, FloatPrecision=12, SummaryMode=smSum. В статусной строке компонента появляется прямоугольник прямо под выбранным столбцом, но значения в нём никакого нет. Подскажите, как сделать, чтоб там отображалась сумма значений.
Заранее спасибо.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Суммирование столбца в CRDBGrid

Сообщение Alexp » Вт 08 янв 2013 12:37

Добрый день,

Приведенных Вами действий достаточно чтобы в CRDBGrid отобразилась сумма по столбцу. Пожалуйста уточните Вашу версию MyDAC, IDE а также тип столбца (ftInteger, ftFloat и т.д.) по которому вы хотите получить итоговую сумму

Skromny
Сообщения: 6
Зарегистрирован: Вс 06 янв 2013 21:23

Re: Суммирование столбца в CRDBGrid

Сообщение Skromny » Вт 08 янв 2013 14:22

Здравствуйте. Версия MyDAC 6 Ttial edition for Delphi 2006 for Win32. но я их установил только для использования компонента CRDBGrid. На форуме нашёл, что этот компонент бесплатный. Доступ же к данным осуществляю через свободные компоненты ANYDac. IDE - BDS 2006. Тип данных столбца описан как NUMBER(38,2) (Oracle). В Датасете определяется как TFMTBCDField.

Skromny
Сообщения: 6
Зарегистрирован: Вс 06 янв 2013 21:23

Re: Суммирование столбца в CRDBGrid

Сообщение Skromny » Вт 08 янв 2013 14:41

И ещё. Это же поле необходимо отображать в CRDBGrid с двумя знаками после запятой, даже если там стоят нули. В fields editor у этого поля ставлю в свойство DisplayFormat = ,0.00 Целые числа отображаются также целыми. А надо вместо 256 отображать 256,00.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Суммирование столбца в CRDBGrid

Сообщение Alexp » Вт 08 янв 2013 15:53

Hello,

В данный момент CRDBGrid не поддерживает агрегатные результирующие данные для типов полей BCD и FMTBCD, добавим эту поддержку в следующую версию. В данный момент вы можете воспользоваться DataTypeMapping для мапинга вашего поля в тип ftFloat.
Для корректного отображения данных с десятичными нулями Вам необходимо установить разделитель дробной части в '.' в настройках системы, либо в переменной Delphi DecimalSeparator, т.е.

Код: Выделить всё

  DecimalSeparator := '.';
  OraQuery1SAL.DisplayFormat := ',.00';
  OraQuery1.Open;

Skromny
Сообщения: 6
Зарегистрирован: Вс 06 янв 2013 21:23

Re: Суммирование столбца в CRDBGrid

Сообщение Skromny » Вт 08 янв 2013 16:11

Alexp писал(а):
В данный момент вы можете воспользоваться DataTypeMapping для мапинга вашего поля в тип ftFloat.
А как это сделать?

Skromny
Сообщения: 6
Зарегистрирован: Вс 06 янв 2013 21:23

Re: Суммирование столбца в CRDBGrid

Сообщение Skromny » Вт 08 янв 2013 16:26

И отображение десятичных нулей таким способом тоже не получается ((( Может, опять дело в том, что тип поля TFMTBCD ?

Skromny
Сообщения: 6
Зарегистрирован: Вс 06 янв 2013 21:23

Re: Суммирование столбца в CRDBGrid

Сообщение Skromny » Вт 08 янв 2013 16:41

Проблема решилась. Действительно, вся проблема была в том, что тип поля определялся как TFMTBCDField. После переопределения в оракле типа с number(38,2) на number поле определилось как TFloatField. И суммирование, и показ нулей заработал.
Всем спасибо за сотрудничество.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Суммирование столбца в CRDBGrid

Сообщение Alexp » Ср 09 янв 2013 10:09

Добрый день,

Вы можете настроить DataTypeMapping двумя способами
1) Дизайн-тайм: В редакторе MyConnection или MyQuery зайти на закладку "Data Type Mapping" и указав либо тип поля в БД (DataBaseType) либо имя поля (Field Name) тип которого вы хотите изменить, и желаемый (результирующий) тип поля (Fied Type).
При открытии DataSet поля попадающие под заданные правила будут автоматически приведены к заданному типу. При использовании мапинга в MyConnection правила буду распространяться на все подключенные DataSet, в случае задании мапинга на уровне DataSet правила будут применены к текущему DataSet.
2) Ран-тайм:

Код: Выделить всё

OraQuery1.DataTypeMap.AddDBTypeRule(oraNumber,0,38,0,2, ftFloat);

Закрыто