powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перерисовать cxGrid?
19 сообщений из 19, страница 1 из 1
Как перерисовать cxGrid?
    #40104725
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Имею 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
Как перерисовать cxGrid?
    #40104744
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Repaint?
...
Рейтинг: 0 / 0
Как перерисовать cxGrid?
    #40104768
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segor,

у вьюши гридовской зови LayoutChanged или ViewChanged.
...
Рейтинг: 0 / 0
Как перерисовать cxGrid?
    #40104844
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
Как перерисовать cxGrid?
    #40104858
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluck99
Брать данные из грида имеет смысл только в случае, если пользователь вводит какие-то данные в грид

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

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

И оно вот прям действительно имеет смысл? Не окажется, случаем, что если замерить - вы таким образом сэкономили 0.001 секунды, и лучшее решение проблемы - просто убрать это условие?
...
Рейтинг: 0 / 0
Как перерисовать cxGrid?
    #40104867
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там стиль под каждую ячейку создается. Что уже косяк. Вместо того, чтобы добавить эти два несчастных стиля в репозиторий стилей и оттуда уже назначать.
...
Рейтинг: 0 / 0
Как перерисовать cxGrid?
    #40104868
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, у автора проблема в том, что он пытается "перерисовать" ячейки. Тогда как по факту проблема в их настройке -- грид назначил ячейкам пустые стили благодаря "оптимизации автора", вот только назад эти самые настройки никто не вернул.
...
Рейтинг: 0 / 0
Как перерисовать cxGrid?
    #40104894
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как перерисовать cxGrid?
    #40104895
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer

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


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


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


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

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


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


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

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


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

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

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

Код: 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
Как перерисовать cxGrid?
    #40104910
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как перерисовать cxGrid?
    #40104911
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,

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

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


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