powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DevExpress cxGrid - убрать нулевые значения
35 сообщений из 35, показаны все 2 страниц
DevExpress cxGrid - убрать нулевые значения
    #39983965
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, какая концепция в cxGid убирания нулевых значений? На их форуме рекомендуют в событии колонки onGetDisplayText менять 0 на пустую строку. Ну для простых колонок это работает, а если у меня колонки с форматированием или даже с денежной единицей? Менять '0.00р.' на пустую строку - не катит, так как формат могут изменить на 0.0 или 0,000 - не важно. Должна ж быть какая-то универсальная приблуда для этого? У меня например колонка со скидками имеет форма 0,00%, денежная - 0,00р., но у многих в винде денежная единица задается символом ₽.
В фастрепорте есть специальная галка HideZeros, а тут что-то не найду.
Кто виноват и что делать ? )
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983968
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в запросе nullif()
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983975
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

он null все равно как 0 будет интерпретировать со всеми вытекающими. Это надо именно в гриде делать
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983977
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
null в гиде это не НОЛЬ
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983979
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, все равно - это костыль. ради того, что грид что-то НЕ показывал, надо дополнительно пилить запросы и вместо просто го select * from emplyes лепить монстра?
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983983
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал так. В обработчике OnDrawDataCell извлекал бы значение, а дальше его обрабатывал и рисовал бы ячейки сам.
Что-то типа:
Код: pascal
1.
Value := tlData.DataController.GetNodeValue(AViewInfo.Node, tlValue.ItemIndex);
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983988
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Virtual Student,
рисовать ячейки самому - это не кроссплатформенно и не идеологически. в 21-м веке рисовать GDI - моветон
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983996
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
DimaBr, все равно - это костыль. ради того, что грид что-то НЕ показывал, надо дополнительно пилить запросы и вместо просто го select * from emplyes лепить монстра?
Надо просто не лениться и один раз освоить SQL до приемлемого уровня, чтобы запросы сложнее SELECT * FROM MyTable не казались "монстрами" (и про * в запросе забыть).
В событиях грида сравнивать надо не текст, а значение.
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39983999
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,

ну меня joinами и вложенными запросами не испугать, просто зачем для того, чтобы клиент не показывал нулевые значения, надо напрягать сервер? ну не по-христиански это, неправильно.
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984000
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99

В событиях грида сравнивать надо не текст, а значение.

И как это сделать нативно?
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984001
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Гриде нет HideZeros, можете даже не искать.
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984002
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто зачем для того, чтобы клиент не показывал нулевые значения, надо напрягать сервер
Вы думаете, что сервер сильно напряжётся, прогнав конечный результат через nullif ?
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984005
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

я думаю, что не серверное это дело - на клиенте нули в пустоту превращать. сервера дело - вернуть результат, нулевый или нулевой и клиенту нужно это отобразить. а то потом будем форматировать дату на сервере по национальным настройкам клиента. вообщем, красивого решения в девках нет, как я понял?
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984006
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Красивое решение, это показывать те значения, которые есть.
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984007
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот вам ответ тех поддержки
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984008
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
Красивое решение, это показывать те значения, которые есть.
+1
Для тех кто путает юзверя, визуально приравнивая 0 к null - в аду отдельный котел
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984014
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
вот вам ответ тех поддержки

спасибо, конечно, но об этом я в стартовом топике писал
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984062
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
спасибо, конечно, но об этом я в стартовом топике писал
Где у вас задаётся формат поля?
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984063
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

GrigoriyFomin
Подскажите, какая концепция в cxGid убирания нулевых значений?

Достаточно в запросе вернуть null.
Только что проверил для TcxCalcEditProperties (формат - ',0.00 "кв.м."')
Для null значений в ячейке пустая строка.

P.S. Firebird + FibPlus
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984068
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99
Где у вас задаётся формат поля?

В свойствах колонки, которая CalcEdit
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984076
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin, вы как игрок в "Поле Чудес", который угадал все буквы, но не смог назвать слово. У вас есть всё для решения задачи.

Во-первых, NULL преобразуется в пустое поле при любом значении DisplayFormat в гриде (см. скриншот). Не знаю, какой у вас сервер, на MySQL именно так. Polesov подсказывает, что на Firebird то же самое. То есть никаких проблем написать пару лишних преобразований в запросе нет. Это намного удобнее, чем возиться на клиенте.

Во-вторых, показывать пользователю пустое поле и в случае 0 (нуля), и NULL - дурной тон. Это плохо и с т.з. отладки. Потом будете гадать, почему периодически вываливаются кривые данные или ошибки преобразования типов. Хорошее решение - не скрывать нули, а делать их бледно-серым цветом, чтобы они только чуть-чуть подсвечивались. Так пользователь не будет цепляться за них глазами, но в случае необходимости проверки, всегда видно, какое значение на самом деле содержит поле.

В-третьих, если вы всё-таки настаиваете на своём странном решении, то ответ я вам уже дал выше: "В событиях грида сравнивать надо не текст, а значение".

Вот пример решения. Properties = CalcEdit (как у вас), DisplayFormat = '### ##0.000 mm'.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
{ onGetDisplayText вашего столбца в гриде }
...
  var
     FieldValue: Variant;   { значение }
     ColumnIndex: Integer;  { индекс колонки }
begin
       ColumnIndex := MyColumn.Index;                        { Определяем индекс столбца }
       FieldValue := ARecord.Values[ColumnIndex];            { Определяем значение поля }
       if FieldValue = 0 then AText := '';                   { Если значение = 0, то отображаем пустую строку }     
       if VarIsNull(FieldValue) then AText := 'здесь NULL';  { Если значение is NULL, отображаем соотв. текст }    
end;
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984078
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

Gluck99 немного опередил. Но идея таже.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TForm1.FormCreate(Sender: TObject);
var
  Index: Integer;
begin
  for Index := 0 to cxGrid1DBTableView1.ColumnCount - 1 do
    if not Assigned(cxGrid1DBTableView1.Columns[Index].OnGetDisplayText) then
      cxGrid1DBTableView1.Columns[Index].OnGetDisplayText := HideZero;
end;

procedure TForm1.HideZero(Sender: TcxCustomGridTableItem;
  ARecord: TcxCustomGridRecord; var AText: string);
var
  Val: Variant;
begin
  Val := ARecord.Values[Sender.Index];
  if VarType(Val) in [ varSmallint, varInteger, varSingle, varDouble,
                       varCurrency, varShortInt, varByte, varWord,
                       varLongWord, varInt64 ]
  then
    if Val = 0 then
      AText := '';
end;
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984079
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99
GrigoriyFomin, вы как игрок в "Поле Чудес", который угадал все буквы, но не смог назвать слово. У вас есть всё для решения задачи.

Спасибо за развернутый ответ. Идея с отрисовкой серым - очень даже интересная, и за код спасибо, буду его использовать. А в оправдание показа пустоты вместо 0 - это например скидка на товар - ну напрягает зрение колонка из 0.00% - она не несет смысла. Внимание должно привлекать именно ненулевАя скидка. или цена за товар, который служебный и дается бесплатно - их немало - упаковки, стаканчики, мешалки и т.д. В моей задаче нул и 0 - это как раз тождественные понятия. кстати, функция
Код: pascal
1.
.FielByName('SomeFloatField').asFloat 


как раз верно (для моих задач) истолковывает null как 0, не вываливаясь в ошибку преобразования типов.
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984082
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitri Krizhanovski
GrigoriyFomin,

Gluck99 немного опередил. Но идея таже.


Тоже спасибо за решение. Идея задавать обработчик при создании формы - респект! Кстати, тут вот говорят про то, что некошерно 0 истолковывать визуально как пустоту, но однако в фастрепорте - это есть и никто анафеме авторов FR не предает.
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984084
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
Код: pascal
1.
.FielByName('SomeFloatField').asFloat

как раз верно (для моих задач) истолковывает null как 0, не вываливаясь в ошибку преобразования типов.
Естественно, просто зависит от того, как вы обрабатываете значения в датасете. Если ваш клиент различает NULL и 0, NULL и пустую строку, то вам нужен тип Variant для этого. Т.е.
Код: pascal
1.
.FielByName('SomeFloatField').Value

и вот тут возможны нюансы с преобразованиями типов.
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984117
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень уже перестала быть "двигателем прогресса"?.. А раньше, для программистов, была. :)
Т.е. сделать один раз правильно и красиво, а потом расслабляться.

Неужели, дополнить код парой юнитов и процедур, с универсальной для задачи реализацией, теперь "не кошерно"?
Про кроссплатформенность вообще молчу...
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984124
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Virtual Student
Лень уже перестала быть "двигателем прогресса"?.. А раньше, для программистов, была. :)
Т.е. сделать один раз правильно и красиво, а потом расслабляться.

Неужели, дополнить код парой юнитов и процедур, с универсальной для задачи реализацией, теперь "не кошерно"?
Про кроссплатформенность вообще молчу...

практические примеры будут? что добавить и какие стандартные юниты помогут отцу русской демократии?
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984142
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
Virtual Student
Лень уже перестала быть "двигателем прогресса"?.. А раньше, для программистов, была. :)
Т.е. сделать один раз правильно и красиво, а потом расслабляться.

Неужели, дополнить код парой юнитов и процедур, с универсальной для задачи реализацией, теперь "не кошерно"?
Про кроссплатформенность вообще молчу...

практические примеры будут? что добавить и какие стандартные юниты помогут отцу русской демократии?

"Отец" на свой вкус и цвет может сам нарисовать в ячейке что-угодно. :)
Подобное не делается как библиотека (хотя и ее методы и философию сначала нужно изучить).
ЗЫ: Я сам "рисую" и иконки и текст. Сложного - "0". Вроде, неплохо получается. (дал бы скрин, но "Бендер запрещает".)
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984254
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
задавать обработчик при создании формы
А чтобы это повсеместно не приходилось делать то впору сварганить наследника gridview и/или datacontroller
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984267
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan
А чтобы это повсеместно не приходилось делать то впору сварганить наследника gridview и/или datacontroller

Нет, нужен наследник TcxEditRepositoryCurrencyItem + TcxCurrencyEditProperties
Но проще всё такие nullIf
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984311
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
Нет
не "нет", а предложен был вариант настройки более высокого уровня, пригодный для полей разных типов
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984331
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan
не "нет", а предложен был вариант настройки более высокого уровня, пригодный для полей разных типов

настройка для полей разных типов уже есть и называется Column.OnGetDisplayText
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984332
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, 22174035
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984335
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну сварганьте наследника, в колонках с нулевым весом было пусто, а с нулевой суммой - нет
...
Рейтинг: 0 / 0
DevExpress cxGrid - убрать нулевые значения
    #39984354
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
сварганьте наследника
наследников-то я давно сварганил, но такого функционала мне не потребовалось
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DevExpress cxGrid - убрать нулевые значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]