powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разукрасить ячейку в cxGrid
25 сообщений из 101, страница 2 из 5
Разукрасить ячейку в cxGrid
    #37955943
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По теме, я уже сказал. Бессмысленно гонять датасет для отрисовки зависимых ячеек
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955963
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrПо теме, я уже сказалтебе показалось
DimaBrБессмысленно гонять датасет для отрисовки зависимых ячеекбессмысленно создавать во вьюшке невидимый в гриде столбец и соответственно забивать память в датаконтроллере под поле если его значение используется лишь как "зависимое" в то время как его (как и все остальные впрочем) можно взять из датасета где оно уже есть
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955971
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синтетический тест на таблице 8000 строк
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.Button1Click(Sender: TObject);
var A: Cardinal;
begin
  ADOTable1.First;
  A := GetTickCount;
  while not ADOTable1.eof do begin
    ADOTable1.Next;
    cxGrid1.Update;
  end;
  ShowMessage(IntToStr(GetTickCount-A));
end;

procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
{34351 мск}//  ACanvas.Brush.Color := ADOTable1.Lookup('IdMaterial',AViewInfo.GridRecord.Values[cxGrid1DBTableView1IdMaterial.Index],'IdUnits')*1000;
{18751 мск}//  ACanvas.Brush.Color :=  AViewInfo.GridRecord.Values[cxGrid1DBTableView1IdUnits.Index]*1000;
end;
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956000
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrСинтетический тест"любой тест показывает ровно то что хотел продемонстрировать тестирующий" (С)
и в чем смысл аццкой манипуляции?
если ты хотел показать как не надо делать, то у тебя получилось нормально
а вообще то что нужно отключать визуальщину при массовой колбасне на датасете я получше тебя знаю
или может ты хотел продемонстрировать слабость адошных компонент?
повторю тебе свой вопрос, хочешь дам демку на
DimaBrЗагрузите в грид пару сотен строк, и потаскайте ползунок вверх-вниз а ты мне укажешь на минусы решения?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956018
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже указал, если гонять датасет, то скорость падает в 2 раза, недостаточно ?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956021
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не важно какие компоненты доступа
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956089
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Да бог с ним. Не хочет человек брать значение из соседней ячейки грида, у него двоичный выбор или невидимый столбец делать (практично, но неэлегантно), или лезть в DataSet, искать поле (у топикстартера вообще через FieldByName), делать кучу проверок типа CheckBrowseMode и т.д. Процессоров много - стерпят.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956130
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrскорость падает в 2 раза, недостаточно ?скорость выполнения бессмысленной операции (скорее даже бредовой), конечно недостаточно. а вот моя демка, слепленная по твоему описанию задачи, проблем со скоростью не демонстрирует даже на объеме большем заказанного в 40 раз. кроме того, при моделировании твоего синтетического тестового кода у меня скорость одинаковая для обоих способов
DimaBrНе важно какие компоненты доступа"садись два" (С)
Ariochили невидимый столбец делать (практично, но неэлегантно)ровно наоборот. элегантно, с точки зрения минимума телодвижений, потому как делается практически только мышкой. однако в случае если задумываешься о кол-ве потребляемой памяти - непрактично
Ariochили лезть в DataSet, ..., делать кучу проверок типа CheckBrowseMode и т.дты наверное думаешь что девэксы тебе все забесплатно дают и максимально эффективно? заблуждаешься
AriochПроцессоров много - стерпятповторюсь что даже бредовый синтетический тест от DimaBr свыше работает одинаково быстро для обоих способов
Ariochвообще через FieldByNameтолько в моем не Lookup юзается а FindKey и вовсе нет FieldByName, ну да это непринципиально том в смысле что не меняет сути предлагаемого способа и одновременно принципиально подчеркивает существенные различия в эффективности разных датасетов чего очевидно не понимает DimaBr
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956141
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> девэксы тебе все забесплатно дают и максимально эффективно?

эфективность не важна.
А бесплатность - да, бесплатно. Потому что они уже при отрисовке выбрали текущую Record, которую передают в события.
Ее искать не надо - они ее уже нашли для своих собственных нужд.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956150
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а тест действительно странный.
делать ADOTable1.Next - т.е. дёргать датасет - чтобы продемонстрировать как быстро будет работать, если его не дёргать. Брр...

Тест должен быть примерно такой:

* Открыть редактирование какой-то ячейки.
* Ввести туда новый текст, но редактор не закрывать пока - остаемся в процессе редактирования.
* 8000 раз случайно выбрать ячейку на экране и ее перерисовать.
* 3америть время и проверить, что редактор по прежднему открыт, на нужной ячейке и не потерял введённое пользователем (но не сохранённoе ещё в ячейку) значение.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956151
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochэфективность не важнаспасибо, засим можно закругляться хотя непонятно тогда зачем ты упомянул процессора
Ariochда, бесплатноеще раз напоминаю о доп. затратах памяти на хранение "невидимого" поля в датаконтроллере. ну если для тебя "бесплатно" это когда наплевать как на скорость так и на прожорливость то больше нечего добавить
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956163
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan,

эффективность важна в целом. т.е. там где ты на неё можешь повлиять.

если ты можешь делать или не делать, делать быстро или медленно - тогда это важно.
а если ты все равно это будешь делать строго определённым способом - то не важно.

Есть такое слово - "инвариант".
Эффективность поиска строки внутри cxGrid - это инвариант.
Это константа, которую надо вынести за скобки и сократить.
А после сокращения уже не важно чему она была равна.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956170
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>на хранение "невидимого" поля в датаконтроллере

Да нету такого поля в исходнйо задаче, нету. Не выдумывай.

> Необходимо разукрасить ячейку в зависимости от значения соседней.

СОСЕДНЕЙ. Т.е. ячейка уже есть, она тоже инвариант.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956177
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochтест действительно странныйя ж говорю, это яркий пример "как не надо делать" был бы еще смысл какой практический, можно было бы думать. а тут апдейт грида после смены текущей записи и так по всему датасету!
Ariochделать ADOTable1.Next - т.е. дёргать датасет - чтобы продемонстрировать как быстро будет работать, если его не дёргатьnext-то делать вполне нормально, а вот нахера цветомузыка со скроллирующейся активной датааварщиной?? и даже так, в моей демке оба варианта одинаково тормозные
AriochТест должен быть примерно такойя ж тебе предлагал демку, можешь изголяться как хочешь и когда покажешь где оно ломается я с интересом ознакомлюсь. потому как мне откровенно непонятно описание твоего предложения по тестированию
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956194
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тест вполне нормальный, имитирует прокручивание грида с первой строчки до последней, в принципе неважно какие действия проводятся в тесте, главное что при разном доступе к данным значительно падает время.
vavan, давайте посмотрим на ваш тест !!!
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956218
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochэффективность важна в целом. т.е. там где ты на неё можешь повлиять.

если ты можешь делать или не делать, делать быстро или медленно - тогда это важно.
а если ты все равно это будешь делать строго определённым способом - то не важнопомедленнее плз, я записываю
будь любезен мудрые мысли привязать к обсуждаемой конкретно задаче, теоретическую пургу позволю себе пропустить
Ariochнету такого поля в исходнйо задаче, нету. Не выдумывайвот именно, в исходной задаче "невидимого" поля в гриде не было. потому и Bobbyпришлось добавить колонку color и сделать ее невидимой
AriochСОСЕДНЕЙ. Т.е. ячейка уже естьследует конечно уточнить у OP но я полагаю что он возможно имел в виду раскрасить ячейку соответствующую определенному полю в зависимости от значения соседнего поля, в гриде не отображаемого

но вообще если ты понял задачу именно так как понял то тогда у меня возражений нет никаких. если поле полюбасу показывается в гриде (т.е. 1х грузится в контроллер) то нет смысла изголяться как предлагаю я
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956224
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ждём вашего теста !!!
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956227
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не теоретическая пурга.

Какая разница как долго ищет запись гридконтроллер если он ее все равно ищет ?

Предлагается сравнить время двух подходов
1) (поиск текущей записи в контроллере + получение и преобразование значения из массива вариантов)
2) (поиск текущей записи в контроллере + поиск текущей записи в датасете + получение и преобразование значения из TField)

Я сказал что эффективность поиска строки контроллером не нужна - она не отразится на результате сравнения.
Ты сказал, что это чушь и про эту эффективность надо думтаь.

Ок, покажи как эта эффективность, какой бы она не была кроме бесконечности, может повлиять на результаты сравнения.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956231
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> имитирует прокручивание грида

ну так кешируются гридом значения не от прокручивания, а потому что вызов событий нарисовать/раскрасить по болшому счёту не связан с текущей строкой в гриде/датасете. И изначално волпрос был про раскраску не текущей строки, а какой-то другой.

т.е. пример показывает, что Locate замедляет в полтора раза прокрутку, да. Но речь-то не о прокрутке была. Настоящие тормза пойдут там, где прокрутки датасета до сих пор вообещ не было, а тут придется делать.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956241
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrТест вполне нормальныйконечно "нормальный", только от жизни слегка оторванный
DimaBrимитирует прокручивание грида с первой строчки до последнейугу, теперь рассказывай в какой твоей "нормальности" оператор скроллирует врукопашную грид от первой до последней строки полным перебором записей
DimaBrв принципе неважно какие действия проводятся в тестекладезь мудрости
DimaBrглавное что при разном доступе к данным значительно падает времязолотые слова, скажу больше, повторюсь что время падает тем значительнее чем более разный доступ к данным в смысле от датасета зависит, вопреки некоторым утверждениям и уже на моем тесте и заказанном кол-ве записей скорость совпадает с "прямым" доступом в датаконтроллер. хотя разумеется чем больше будет записей тем медленнее станет поиск в датасете. но и датасет ведь в тесте не самый быстрый
DimaBrдавайте посмотрим на ваш тествот и я говорю, давайте, вдруг я где попутал
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956252
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochКакая разница как долго ищет запись гридконтроллер если он ее все равно ищет ?да не ищет он ее в штатном варианте вовсе, он просто берет готовые значения. ищет у меня. но у меня по памяти эффективнее, а скорость может оказаться как быстрее так и медленнее, зависит от
AriochТы сказал, что это чушь и про эту эффективность надо думтаья все время толкую об эффективности в разрезе потребляемой памяти а ты воюешь с ветряными мельницами
AriochНастоящие тормза пойдут тамтормоза пойдут везде где исполняется массовая обработка датасета без деактивации подвязанной гуйни. но никто ж не заставляет творить такую порнографию??
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956402
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё равно, ваш метод медленее
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TForm1.grd1DBTableView1Column2CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin  // 18365
  Assert(cds2.FindKey([AViewInfo.GridView.DataController.GetRecordId(AViewInfo.GridRecord.RecordIndex)]));
  Acanvas.brush.Color:=cds2IntegerField2.Value;
  ACanvas.Canvas.FillRect(AViewInfo.Bounds);
  ADone:=True;
end;

procedure TForm1.grd2DBTableView1Column3CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin  // 16989
  Acanvas.brush.Color:=AViewInfo.GridRecord.Values[grd2DBTableView1Column2.Index];
  ACanvas.Canvas.FillRect(AViewInfo.Bounds);
  ADone:=True;
end;
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956413
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну на, отключай http://rghost.ru/40340676

инетресно, как быстро у тебя получится заменить примитивный обработчик в пару строк.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956473
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВсё равно, ваш метод медленеепродолжай учиться и работать над собой
Ariochотключайэто ты мне? что "отключать"?
Ariochкак быстро у тебя получится заменить примитивный обработчик в пару строкты вообще ничему не учишься?
в FormCreate добавить после цикла
Код: pascal
1.
2.
  cds2.CloneCursor(ds1,false);
  cds2.IndexFieldNames:='field1';


а в xgrdGrid1DBTableView1CustomDrawCell первые 9 строк твоей порнографии заменить на две
Код: pascal
1.
2.
  Assert(cds2.FindKey([AViewInfo.GridRecord.Values[0]]));
  v:=cds2.Fields[aviewinfo.Item.Index].AsInteger;


зы. если уж удосужился тесты делать будь любезен излагать внятно что ты демонстрируешь и на что я должен обратить внимание
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956482
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochну наи еще одна просьба, у меня 2007 так что плз без новомодных имен юнитов в uses, спасибо
...
Рейтинг: 0 / 0
25 сообщений из 101, страница 2 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разукрасить ячейку в cxGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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