powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Тормозит форма из-за выделения цветом в cxGrid
21 сообщений из 21, страница 1 из 1
Тормозит форма из-за выделения цветом в cxGrid
    #40088599
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Сделал выделение строк в cxGrid с помощью GetContentStyle:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TForm18.cxGrid2DBTableView1StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
begin
if (ADOQuery11.Active) then
  ADOQuery11.Close;
ADOQuery11.SQL.Clear;
ADOQuery11.SQL.Add('SELECT Closed FROM Remont WHERE Act_VK='''+ADODataSet1.FieldByName('Nomer_Protokol').AsString+''' and Date_VK='''+ADODataSet1.FieldByName('Date_VK').AsString+'''');
ADOQuery11.SQL.Add('and Zav_Nomer='''+VarToStr(ARecord.Values[cxGrid2DBTableView1Zav_Nomer.Index])+''' and Naimenovanie='''+VarToStr(ARecord.Values[cxGrid2DBTableView1Naimenovanie.Index])+''' and Dec_Nomer='''+VarToStr(ARecord.Values[cxGrid2DBTableView1Dec_Nomer.Index])+'''');
ADOQuery11.Open;
  if ADOQuery11.FieldByName('Closed').Value=True then
    AStyle := cxStyle1
      else
end;


Всё работает, нужные строки выделяет, но форма из-за этого начинает тормозить в зависимости от количества записей, чем их больше, тем сильнее. При 50 практически невозможно работать с формой!
Подскажите, как можно избавиться от тормозов?
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088614
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала все вычитать... Условие выделения цветом положить в столбец и скрыть его.. а в этом обработчике обращаться только к уже посчитанному полю и принимать решение о цвете...
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088680
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA,
Если для отрисовки (точнее калькулейта) каждой ячейки вью выполнять по SQL-запросу, то логично что всё начнёт тормозить
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088799
Galadriel75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример, на основе которого я делал:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TfrmCalculationMechanism.cxGridDBTableView1StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
var
  t: Integer;

begin
  if ARecord <> nil then
  begin
    t := StrToIntDef(VarToStr(ARecord.values[column_IndividualData.Index]), 0);   // вычитка инфы 

    if t = 1 then
    begin
      if ARecord.Selected then
        AStyle := DM.stLiteGreenBold
      else
        AStyle := DM.stBold;
    end
    else if ARecord.Selected then
      AStyle := DM.stLiteGreen;
  end;
end;



column_IndividualData - колонка, из которой надо дернуть инфу...
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088813
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой кошмар
разве можно такой код вешать на каждую строку?????

создай словарь TDictionary, запиши в него все цвета, параметры и т.д. и уже потом бери из него данные
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088853
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чем прикол словаря, тут насколько я вижу стили тупо размещены на датамодуле и он к ним напрямую обращается
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088866
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galadriel75
Код: pascal
1.
2.
3.
  if ARecord <> nil then
  begin
    t := StrToIntDef(VarToStr(ARecord.values[column_IndividualData.Index]), 0);   // вычитка инфы 


Не встречал ситуации, когда ARecord приходил пустым.
А значение колонки проще проверять через VarIsNumeric. Тогда сразу понятно, что там не пусто и там число.
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088870
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди, прикол в том, что не нужно тянуть из базы все данные на каждый чих, а вытянуть их сразу при старте окна или приложения в какую-нибудь структуру в памяти, ведь к памяти быстрее обращаться, чем к SQL-серверу.
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088880
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Кто тебе сказал, что это именно запрос к БД?

TDM=class(TDataModule)
....
property MyColor:TColor read .... write ....;
end;


И обращение к DM.MyColor - это именно обращение к памяти, а не как-то там еще... Хотя могут быть варианты, не спорю.
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40088942
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster, X11,
вы точно один и тот же код обсуждаете? проблема в том что у ТС. А там на каждую ячейку (даже не запись!) выполняется запрос
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40089019
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

У ТС вообще жуть на самом деле. Нельзя так делать от слова совсем. Это же опа и серверу и приложению.
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40100679
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, понял что не правильно так делать. Ну не знал что это событие каждый раз вызывается))
X-Cite
Сначала все вычитать... Условие выделения цветом положить в столбец и скрыть его.. а в этом обработчике обращаться только к уже посчитанному полю и принимать решение о цвете...

Можете подсказать как реализовать заполнение колонки при открытии формы?
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40100692
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA
Можете подсказать как реализовать заполнение колонки при открытии формы?
Джойном таблицы Remont к основному запросу
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40100913
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA
Можете подсказать как реализовать заполнение колонки при открытии формы?

1) Перед открытием формы делаем запрос к БД, в котором получаем данные, которые будем показывать пользователю в гриде плюс данные, которые будем сравнивать, чтобы выделить какие-то ячейки цветом. Если у вас таблица с выполненными или не выполненными ремонтами, то запрос должен выдёргивать таблицу с этими данными плюс boolean поле Closed для каждой записи этой таблицы.
2) К столбцам грида с собственно содержимым добавляем столбец, который будет хранить значение поля Closed из таблицы в п. 1, ставим столбцу Visible = False;
3) Для кастомизации ячейки/строки грида существуют специальные обработчики, в частности, OnCustomDrawCell. В нём пишем код, который сравнивает содержимое ячейки грида, в котором хранится значение поля Closed (true или false), и красит ячейку в соответствующий цвет. Ход мысли примерно такой:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.MyTableView_CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
  var
       ClosedIndex: Byte;
       OrderClosed: Boolean;
begin
       ClosedIndex := MyTableView_ColumnOrderClosed.Index;       { Получаем индекс столбца с ячейками (поле Closed) }
       OrderClosed := AViewInfo.GridRecord.Values[ClosedIndex];  { Получаем значение OrderClosed (True/False) }
         if OrderClosed then ACanvas.Brush.Color := clGreen      { Ремонт сделан, заливаем текущую ячейку зелёным }
         else ACanvas.Brush.Color := clRed;                      { Ремонт не сделан, заливаем красным }
end;
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40101228
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluck99, спасибо. Вчера сделал как знал. В таблицу БД добавил поле Color, на onShow формы делаю UPDATE таблицы по текущим значениям из второй и уже меняю стиль в соответствии со значением
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TForm18.FormShow(Sender: TObject);
begin
if (ADOQuery11.Active) then
  ADOQuery11.Close;
ADOQuery11.SQL.Clear;
ADOQuery11.SQL.Add('UPDATE Dannie_VK SET Color = Closed FROM Dannie_VK a, VK b, Remont C WHERE b.Nomer_Protokol=c.Act_VK');
ADOQuery11.SQL.Add(' and b.Date_VK=c.Date_VK and a.Zav_Nomer=c.Zav_Nomer and a.Naimenovanie=c.Naimenovanie and');
ADOQuery11.SQL.Add(' a.Dec_Nomer=c.Dec_Nomer');
ADOQuery11.ExecSQL;
ADODataSet8.Requery;
end;


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm18.cxGrid2DBTableView1StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
begin
  if ARecord.Values[cxGrid2DBTableView1Color.Index]='True' then
    AStyle := cxStyle1
      else
end;
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40101469
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA
if ARecord.Values[cxGrid2DBTableView1Color.Index]='True' then

Это лучше бы развидеть, и SQL.Add - тоже. А в остальном - правильно.
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40101734
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer, с чего ради?
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40101736
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA,

ADOQuery11.SQL.Text := 'sql' заменяет Close, Clear, и Add одновременно
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40101741
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
ADOQuery11.SQL.Text := 'sql' заменяет Close, Clear, и Add одновременно

А прописывание в дизайн-тайме заменяет всё перечисленное.
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40101744
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
FOGOT-BAstA,

ADOQuery11.SQL.Text := 'sql' заменяет Close, Clear, и Add одновременно

Кроме того, при должной самодисциплине в единообразии задания констант существенно облегчает кросс-строчный поиск; и в любом случае в бинарнике будет содержаться вся строка без примесей кавычек и прочей разметки.
...
Рейтинг: 0 / 0
Тормозит форма из-за выделения цветом в cxGrid
    #40101785
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
wadman
ADOQuery11.SQL.Text := 'sql' заменяет Close, Clear, и Add одновременно

А прописывание в дизайн-тайме заменяет всё перечисленное.

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


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