Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перерисовать cxGrid? / 19 сообщений из 19, страница 1 из 1
15.10.2021, 13:27
    #40104725
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Всем привет!
Имею cxGrid, который раскрашиваю в обработчике:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TfMain.cxGridDBTableView1StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
begin
  if not(is_export) then
    begin
      if not(VarIsNull(ARecord.Values[4])) then
      begin
        if not Assigned(AStyle) then
          AStyle := TcxStyle.Create(Sender);
        if ARecord.Values[7]  = 'PROCESS' then AStyle.Color := clLime;
        if ARecord.Values[7]  = 'OK' then AStyle.Color := $CCFFCC;
      end;
    end;
end;



Так же есть процедура экспорта содержимого грида в xls файл.
При экспорте раскарски ячеек не происходит (для ускорения экспорта).

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

Вопрос - как программно заставить перерерисоваться грид после экспорта?
Спасибо)
...
Рейтинг: 0 / 0
15.10.2021, 14:49
    #40104744
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Repaint?
...
Рейтинг: 0 / 0
15.10.2021, 16:41
    #40104768
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
segor,

у вьюши гридовской зови LayoutChanged или ViewChanged.
...
Рейтинг: 0 / 0
15.10.2021, 22:23
    #40104844
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
segor
Вопрос - как программно заставить перерерисоваться грид после экспорта?
Не брать данные из грида, а брать их из DataSet'а (можно даже не связанного с гридом вообще). В момент экспорта отключать грид. Брать данные из грида имеет смысл только в случае, если пользователь вводит какие-то данные в грид рядом с данными из БД и нужен экспорт всей этой кучи.

Код: pascal
1.
2.
 if ARecord.Values[7] = 'PROCESS' then AStyle.Color := clLime;
 if ARecord.Values[7] = 'OK' then AStyle.Color := $CCFFCC;

Т.е. если пользователь изменит порядок следования столбцов грида, он или получит ошибку конвертации типа Variant, или некорректно подсвеченные данные. Или ему надо запретить перемещать столбцы.
...
Рейтинг: 0 / 0
16.10.2021, 00:03
    #40104858
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Gluck99
Брать данные из грида имеет смысл только в случае, если пользователь вводит какие-то данные в грид

Не только. Ещё - если там применены клиентские фильтрация-группировка, или нужно взять оттуда порядок, видимость столбцов, вычисляемые поля (те же чекбоксы, например), а самое вероятное - экспорт просто сделан как стандартная операция на гриде (любом гриде). В общем - причин может быть вполне достаточно.

segor
При экспорте раскарски ячеек не происходит (для ускорения экспорта)

И оно вот прям действительно имеет смысл? Не окажется, случаем, что если замерить - вы таким образом сэкономили 0.001 секунды, и лучшее решение проблемы - просто убрать это условие?
...
Рейтинг: 0 / 0
16.10.2021, 01:09
    #40104867
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Там стиль под каждую ячейку создается. Что уже косяк. Вместо того, чтобы добавить эти два несчастных стиля в репозиторий стилей и оттуда уже назначать.
...
Рейтинг: 0 / 0
16.10.2021, 01:13
    #40104868
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
И да, у автора проблема в том, что он пытается "перерисовать" ячейки. Тогда как по факту проблема в их настройке -- грид назначил ячейкам пустые стили благодаря "оптимизации автора", вот только назад эти самые настройки никто не вернул.
...
Рейтинг: 0 / 0
16.10.2021, 10:27
    #40104894
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Gluck99
segor
Вопрос - как программно заставить перерерисоваться грид после экспорта?
Не брать данные из грида, а брать их из DataSet'а (можно даже не связанного с гридом вообще). В момент экспорта отключать грид. Брать данные из грида имеет смысл только в случае, если пользователь вводит какие-то данные в грид рядом с данными из БД и нужен экспорт всей этой кучи.

Код: pascal
1.
2.
 if ARecord.Values[7] = 'PROCESS' then AStyle.Color := clLime;
 if ARecord.Values[7] = 'OK' then AStyle.Color := $CCFFCC;

Т.е. если пользователь изменит порядок следования столбцов грида, он или получит ошибку конвертации типа Variant, или некорректно подсвеченные данные. Или ему надо запретить перемещать столбцы.


поправим, будем обращаться по имени. спасибо
...
Рейтинг: 0 / 0
16.10.2021, 10:29
    #40104895
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
softwarer

И оно вот прям действительно имеет смысл? Не окажется, случаем, что если замерить - вы таким образом сэкономили 0.001 секунды, и лучшее решение проблемы - просто убрать это условие?


Имеет. Если при экспорте оставить раскраску, время экспорта увеличивается в несколько раз.
...
Рейтинг: 0 / 0
16.10.2021, 10:30
    #40104896
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
JayDi
Там стиль под каждую ячейку создается. Что уже косяк. Вместо того, чтобы добавить эти два несчастных стиля в репозиторий стилей и оттуда уже назначать.


это уже поправил. спасибо
...
Рейтинг: 0 / 0
16.10.2021, 10:32
    #40104897
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
JayDi
И да, у автора проблема в том, что он пытается "перерисовать" ячейки. Тогда как по факту проблема в их настройке -- грид назначил ячейкам пустые стили благодаря "оптимизации автора", вот только назад эти самые настройки никто не вернул.


эмммм... вот это не понял. если можно, поясните пжалста)
...
Рейтинг: 0 / 0
16.10.2021, 10:43
    #40104899
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
ъъъъъ
segor,

у вьюши гридовской зови LayoutChanged или ViewChanged.


не помогает.
...
Рейтинг: 0 / 0
16.10.2021, 10:46
    #40104900
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Gluck99
segor
Вопрос - как программно заставить перерерисоваться грид после экспорта?
Не брать данные из грида, а брать их из DataSet'а (можно даже не связанного с гридом вообще). В момент экспорта отключать грид. Брать данные из грида имеет смысл только в случае, если пользователь вводит какие-то данные в грид рядом с данными из БД и нужен экспорт всей этой кучи.


Ну и грида есть уже готовый экспорт в XLS. Он вполне устраивает.
...
Рейтинг: 0 / 0
16.10.2021, 10:51
    #40104901
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
segor

эмммм... вот это не понял. если можно, поясните пжалста)


GetContentStyle вызывается в момент создания ячейки... А уж когда эту ячейку будут создавать -- одному гриду известно и его оптимизатору. В экспорт попадает.

CustomDrawCell вызывается в момент отрисовки, т.е. всегда, когда надо перерисовать что-то. В экспорт не попадает.
...
Рейтинг: 0 / 0
16.10.2021, 10:54
    #40104902
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
segor
Ну и грида есть уже готовый экспорт в XLS. Он вполне устраивает.

Кстати, экспорт в xls (офис 2003) у девок уже много-много лет не поддерживается и лежит просто для обратной совместимости. Для экспорта в эксель лучше использовать экспорт в xml ака xlsx (офис 2007+).
...
Рейтинг: 0 / 0
16.10.2021, 10:57
    #40104903
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
А значения надо всегда через индексы колонок получать. Например:

Код: pascal
1.
2.
3.
4.
5.
// grid
value := ARecord.Values[grid_ItemsViewMainREQUEST_STATUS.Index]

// treelist
value := ANode.Values[tree_BalancesCALC_PARENT_DOCS.ItemIndex]
...
Рейтинг: 0 / 0
16.10.2021, 11:37
    #40104910
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
segor
поправим, будем обращаться по имени. спасибо
Надо по индексу обращаться. И вообще непонятно, почему не использовать в таком простейшем случае OnCustomDrawCell с отрисовкой непосредственно на канве:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  var
      ColumnAIndex, ColumnBIndex: byte;
      ColumnBValue: string;
begin
         ColumnAIndex := ColumnA.Index;
         if VarIsNull(AViewInfo.GridRecord.Values[ColumnAIndex]) then exit;

         ColumnBIndex := ColumnB.Index;
         ColumnBValue  := AViewInfo.GridRecord.Values[ColumnBIndex];
         if ColumnBValue = 'PROCESS' then ACanvas.Brush.Color := clLime;
         if ColumnBValue = 'OK' then      ACanvas.Brush.Color := $CCFFCC;
end;

К чему этот огород со стилями?
...
Рейтинг: 0 / 0
16.10.2021, 11:45
    #40104911
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Gluck99,

Спасибо, переделаем)
...
Рейтинг: 0 / 0
16.10.2021, 11:59
    #40104914
segor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перерисовать cxGrid?
Gluck99,

Да, в таком виде все отлично работает))
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перерисовать cxGrid? / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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