powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разукрасить ячейку в cxGrid
101 сообщений из 101, показаны все 5 страниц
Разукрасить ячейку в cxGrid
    #37952629
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня. Собственно сабж. Необходимо разукрасить ячейку в зависимости от значения соседней. Пытаюсь делать вот так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TFormmain.RepFieldViewColumn2CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
begin
  ARec := AViewInfo.Bounds;
  if TcxGridDBColumn(AviewInfo.Item).DataBinding.Fieldname = 'strcolor' then
    begin
      Acanvas.brush.Color:=ArepDiagrColor.FieldByName('color').AsInteger;
      ACanvas.Canvas.FillRect(ARec);
    end;
end;


но все ячейки упорно закрашиваются только цветом первой записи датасета. Подскажите, где грабли, плз!!! Заранее благодарен!
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37952675
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobbyгде граблив данном событии отрисовываемая ячейка не синхронизирована с датасетом, надо обращаться к датаконтроллеру за данными. ты ведь не в гридмоде орудуешь?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37952676
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это пример поможет?
http://www.sql.ru/blogs/x11/1335
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37952680
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37952688
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby,

используй у grid -> TableView -> Column -> Styles событие OnGetContentStyle

туда передаетс Record
забираешь у него .Values[SomeColumn.Index] и смотришь по нему
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37952689
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, разобрался. Вот, что помогло
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TFormmain.RepFieldViewColumn2CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
val: string;
begin
  ARec := AViewInfo.Bounds;
  if TcxGridDBColumn(AviewInfo.Item).DataBinding.Fieldname = 'strcolor' then
    begin
      val := VarAsType(AViewInfo.GridRecord.DisplayTexts[RepFieldView.GetColumnByFieldName('color').index], varString);
      Acanvas.brush.Color:=strtoint(val);
      ACanvas.Canvas.FillRect(ARec);
    end;
end;



пришлось добавить колонку color и сделать ее невидимой. Может не сильно красиво, но действенно оказалось
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37952697
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BobbyМожет не сильно красиво"все правильно сделал" (С), другие способы геморнее
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37952702
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вот похожая тема по разукрашке
http://www.sql.ru/forum/actualthread.aspx?tid=320097
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37953216
Aleksey V.P.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BobbyВсем спасибо, разобрался. Вот, что помогло
Код: pascal
1.
2.



пришлось добавить колонку color и сделать ее невидимой. Может не сильно красиво, но действенно оказалось

Не надо боятсо добавлять невидимые "служебные" колонки, это нормально, остальные способы действительно геморнее.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955556
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey V.P.это нормальноэт на самом деле не очень здоровое решение и я бы предпочел чтоб у девэксов была в этом месте синхронизация (по крайней мере как вариант) но ее увы нет
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955585
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
она есть

просто читать надо данные из грида, а не их датасета.

еще не хватало на каждый чих каждой ячейки базу данных дергать. Это даже тупой TDBGrid не делает
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955616
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanэт на самом деле не очень здоровое решение и я бы предпочел чтоб у девэксов была в этом месте синхронизация (по крайней мере как вариант) но ее увы нет
Гонять туда-сюда датасет ??? Вы в своём уме ? А если пользователь просто прокрутил грид мышкой ?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955621
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochона естьсинхронизации с датасетом в этом месте нет
Ariochпросто читать надо данные из грида, а не их датасетас кем разговариваешь?я говорю что приходится читать данные из датаконтроллера (а не грида) потому что нет возможности читать непосредственно из датасета. точнее есть конечно но синхронизироваться врукопашную придется и скорее всего без клона не обойтись. а ты мне: "надо из грида". кому "надо"?
Ariochне хватало на каждый чих каждой ячейки базу данных дергатьFYI "читать данные из датасета" != "дергать бд", про "тупой" комментировать не стану
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955634
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrГонять туда-сюда датасет ???"гонять туда-сюда" в смысле если данных нет в буфере то спозиционироваться по значению ключевого поля, да. опционально конечно как я отметил
DimaBrВы в своём уме ?а есть варианты в чьем я могу быть еще?
DimaBrесли пользователь просто прокрутил грид мышкой ?если "вылезло" несколько ранее невидимых строк то "повставать" на них в датасете перед соответствующими событиями отрисовки. если есть какие-то проблемы то озвучивай их конкретно уже
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955699
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanесли есть какие-то проблемы то озвучивай их конкретно уже
Конечно есть, проблема в том что если гонять датасет, грид будет сильно тормозить
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955713
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrесли гонять датасет, грид будет сильно тормозитьнаверное возможно если твой датасет настолько тормозной что отыскать несколько визуализируемых строк для него проблема. для моего нет и основные тормоза идут как раз от грида. ну так на то я и предложил это как возможный вариант поведения
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955764
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Загрузите в грид пару сотен строк, и потаскайте ползунок вверх-вниз (бедный датасет)
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955835
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЗагрузите в грид пару сотен строк, и потаскайте ползунок вверх-внизну кого ты лечишь? я в датаконтроллер (а не грид, повторюсь) гружу сотни тысяч записей и знаю как это говно работает
DimaBrбедный датасету меня "богатый"
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955864
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> FYI "читать данные из датасета" != "дергать бд"

а кто это гарантирует ?
вы же не знаете наперед какой датасет будет ?

Т.е. давай-те просто так нагрузим датасет и будем надеятсья что он достаточно умный, чтобы с этим справиться.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955866
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если у датасета еще по master-detail подключено несколько других и у на всех ещё повешены свои db-aware контролы - то устроим дискотеку!
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955874
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanну кого ты лечишь?
Завидую вашему доктору !!!
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955884
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа кто это гарантирует ?никто вестимо, включая меня
Ariochвы же не знаете наперед какой датасет будет ?я-то знаю, но разрабы девэкса конечно нет, оттого и сделал бы такое поведение опциональным. ты не читаешь что я пишу?
Ariochдавай-те просто так нагрузим датасет и будем надеятсья что он достаточно умный, чтобы с этим справитьсядавай для начала ты просто не будешь фантазировать? про свои мне не надо "надеяться", а те кто живут надеждами пусть наздоровье юзают описанный здесь способ
Ariochесли у датасета еще по master-detail подключено несколько других и у на всех ещё повешены свои db-aware контролы - то устроим дискотекут.е. про клоны ты тоже не увидел?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955893
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЗавидую вашему докторуа по теме есть что сказать?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955904
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну возьми и сделай это в DevExpress'e - исходники же есть.

Интересно как там будет drag-n-drop синхронизироваться или группировка.

Не забывай маленький такой эффект, что при изменении строки в TDataSource должна меняться и текузая строка в гриде.

Т.е. стою я редактирую ячейку по центру, вдруг сбоку всплыло оповещение, в аську мне написали. Всплыло, повисело и уплыло.
Грид натурально начинает в уголке ячейки перерисовывать.
Сдвигает TDataSet, тот сдвигает TDataSource, а тот сдвигает текующую строку в гриде, нафиг закрывая редактор.

В конце концов не даром у TDataSet есть целый массив записей и возможность прочитать не только текущую, но и любую строку, через что TDBGird и работает.

В общем, если тебе не очевидно, что идея твоя неудачная - то просто возьми и сделай. И посмотри что получится.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37955930
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochвозьми и сделай это в DevExpress'e - исходники же естьэто к чему? я повторюсь предлагаемый мной вариант вполне реализуется даже без надругательства над фирменными сорцами или создания наследников, чисто с применением использованного здесь хэндлера. а если бы ихные разрабы брали все мои патчи или реализовывали идеи, оно бы там разумеется давно было
Ariochкак там будет drag-n-drop синхронизироватьсяне юзаю потому затрудняюсь сходу без раздумий представить какие могут быть проблемы. обрисуешь?
Ariochили группировкаюзаю, но также с интересом жду описания ожидаемых проблем в приложении к моему варианту
AriochНе забывай маленький такой эффект, что при изменении строки в TDataSource должна меняться и текузая строка в гридениче не понял
AriochСдвигает TDataSetблинский блин, сколько раз тебе повторить про клоны ?
Ariochне даром у TDataSet есть целый массив записей и возможность прочитать не только текущую, но и любую строкуну спасибо за откровения
Ariochесли тебе не очевидно, что идея твоя неудачнаятеперь мне очевидно что про датасеты и девэксы ты знаешь не так много как тебе кажется
Ariochпросто возьми и сделай. И посмотри что получитсяхочешь я тебе дам демку чтоб ты мог сделать то что предлагаешь мне?
...
Рейтинг: 0 / 0
Разукрасить ячейку в 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
Разукрасить ячейку в cxGrid
    #37956495
vavanAriochну наи еще одна просьба, у меня 2007 так что плз без новомодных имен юнитов в uses, спасибо
а оно на 2007 не работает, АВ валится, даже если поправить юниты
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956497
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подглядывающийоно на 2007 не работаету меня работает
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956500
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanAriochотключайэто ты мне? что "отключать"?

>>>тормоза пойдут везде где исполняется массовая обработка датасета без деактивации подвязанной гуйни

Ок, не отключай. Дезактивируй. Чтобы без тормозов.

> без новомодных имен юнитов в uses

оно само...

> cds2.IndexFieldNames:='field1';
Это в DFM есть
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956505
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подглядывающийАВ валится, даже если поправить юниты
попробуй
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Graphics,
   Forms, Dialogs,   
  cxGraphics,  cxCustomData, cxFilter, cxEdit, cxStyles,
  cxControls, cxData, cxDataStorage, cxDBData, cxGridLevel, cxClasses,
  cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
  cxGrid, cxLookAndFeels, cxLookAndFeelPainters, DB, DBClient, StdCtrls,
  Classes, Controls;

type
  TForm2 = class(TForm)
    ds1: TClientDataSet;
    ds2: TDataSource;
    fldds1field1: TIntegerField;
    fldds1field2: TIntegerField;
    fldds1field3: TIntegerField;
    xgrdGrid1DBTableView1: TcxGridDBTableView;
    xgrdGrid1Level1: TcxGridLevel;
    xgrd1: TcxGrid;
    xgrd2: TcxGrid;
    xgrdGrid2DBTableView2: TcxGridDBTableView;
    xgrd3: TcxGridLevel;
    xgrcGrid1DBTableView1field1: TcxGridDBColumn;
    xgrcGrid1DBTableView1field2: TcxGridDBColumn;
    xgrcGrid1DBTableView1field3: TcxGridDBColumn;
    xgrcxgrd2field1: TcxGridDBColumn;
    xgrcxgrd2field2: TcxGridDBColumn;
    xgrcxgrd2field3: TcxGridDBColumn;
    chk1: TCheckBox;
    chk2: TCheckBox;
    cds2: TClientDataSet;
    cds2field1: TIntegerField;
    cds2field2: TIntegerField;
    cds2field3: TIntegerField;
    procedure FormCreate(Sender: TObject);
    procedure xgrdGrid1DBTableView1CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    procedure chk2Click(Sender: TObject);
    procedure chk1Click(Sender: TObject);
    procedure xgrdGrid2DBTableView2CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
  private
    procedure ToggleGrid(const ck: TObject; const view: TcxGridDBTableView);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
uses cxGridDBDataDefinitions;

{$R *.dfm}

procedure TForm2.ToggleGrid(const ck: TObject; const view: TcxGridDBTableView);
var ds: TDatasource;
begin
    ds := nil;
    if (ck as TCheckBox).Checked then ds := ds2;

    view.DataController.DataSource := ds;
end;

procedure TForm2.chk1Click(Sender: TObject);
begin
   ToggleGrid(Sender, xgrdGrid1DBTableView1);
end;

procedure TForm2.chk2Click(Sender: TObject);
begin
   ToggleGrid(Sender, xgrdGrid2DBTableView2);
end;

procedure TForm2.FormCreate(Sender: TObject);
var i: integer;
begin
  ds1.CreateDataSet;

  for i:= 0 to 100 do
      ds1.AppendRecord([i,Random(100)-50,Random(100)-50]);

  cds2.CloneCursor(ds1,false);
  cds2.IndexFieldNames:='field1';

  with TForm.Create(Self) do begin
       FormStyle := fsStayOnTop;
       BorderStyle := bsSingle;
       BorderIcons := [];
       Caption := 'drag me over grids';
       Visible := true;
  end;
end;

procedure TForm2.xgrdGrid1DBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var v: integer; //b: TBookmarkStr;
begin
{  ds1.DisableControls;
  try
    b := ds1.Bookmark;
    ds1.FindKey([AViewInfo.GridRecord.Values[0]]);
    v := (aviewinfo.item.DataBinding as TcxGridItemDBDataBinding).Field.AsInteger;
    ds1.Bookmark := b;
  finally
    ds1.EnableControls;
  end;}
  Assert(cds2.FindKey([AViewInfo.GridRecord.Values[0]]));
  v:=cds2.Fields[aviewinfo.Item.Index].AsInteger;

  with ACanvas.font do
    if v > 0 then Color := clGreen else
    if v < 0 then Color := clRed else
                  Color := clBlack;

end;

procedure TForm2.xgrdGrid2DBTableView2CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var v: integer;
begin
  v := AViewInfo.GridRecord.Values[AViewInfo.item.Index];

  with ACanvas.font do
    if v > 0 then Color := clGreen else
    if v < 0 then Color := clRed else
                  Color := clBlack;
end;

end.

...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956508
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochДезактивируй. Чтобы без тормозовты можешь внятно излагать?
Ariochоно самоэто ты так извиняешься что у тебя нет 2007-й дельфы?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956534
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что же, фишка TClientDataset.CloneCursor впечатляет.

Что будет, если исходный DataSet будет не другой CDS, а какой-нибудь обычный TSQLQuery, и он вовсе не держит в памяти всю таблицу целиком ? Тогда TClientDataset.CloneCursor не пройдет и придется делать в память полную копию таблицы. По сравнению с нежеланием тратить память на невидимый столбец это должно быть просто преступление.


Таким образом, насколько понимаю, этот способ имеет смысл только при использовании CDS в качестве истоника данных.

До недавнего времени при этом cxGrid все равно бы делал полную копию данных во внутренние структуры.
В последнем апдейте вроде для некоторых датасетов тепеь позволена подгрузка по мере необходимости. Надеюсь, он не дублирует больше CDS.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956555
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochНу что же, фишка TClientDataset.CloneCursor впечатляета так ты видимо дезавуируешь всю пургу что ранее намел?
AriochЧто будет, если исходный DataSet будет не другой CDSответ искать в моих ранних ответах в треде
Ariochнасколько понимаю, этот способ имеет смысл только при использовании CDS в качестве истоника данныхстрого говоря опять неправильно понимаешь. при использовании любого датасета имеющего соответствующий функционал. а их таки есть
AriochДо недавнего времени при этом cxGrid все равно бы делал полную копию данных во внутренние структурыпри чем "при этом"? в bound mode он именно так и фурычит, для всех столбцов грида (включая невидимые) в датаконтроллере создается столбец со всеми вытекающими
AriochВ последнем апдейте вродеа ты не гадай а спроси прямо уже, я таки эксперт.
Ariochвроде для некоторых датасетов тепеь позволена подгрузка по мере необходимоститы про Server Mode что ли? это несколько перпендикулярно обсуждаемому топику
AriochНадеюсь, он не дублирует больше CDSничего не изменилось (и не будет) в отношении рассматриваемой задачи
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956590
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> при использовании любого датасета имеющего соответствующий функционал
Т.е. DevExpress должн завести у себя таблицу таких датасетов и как этот функционал включать ?
Иначе это будут включать все новички на любых таблицах и обвинять грид в тормозах и AV.

> а так ты видимо дезавуируешь всю пургу что ранее намел?
при нарантированом использовании CDS в режиме CloneCursor и в качестве первичного источника данных
довольно узкая ниша. Шаг в сторону - и ку-ку.

При этом вариант без CDS все равно проще и универсальнее.

cds2.FindKey([AViewInfo.GridRecord.Values[0]]); // Assert не катит - он отключиться может в релизе
v := (aviewinfo.item.DataBinding as TcxGridItemDBDataBinding).Field.AsInteger;

v := AViewInfo.GridRecord.Values[AViewInfo.item.Index];

> в bound mode он именно так и фурычит, для всех столбцов грида (включая невидимые) в датаконтроллере создается столбец со всеми вытекающими
Речь не только про столбцы, но и про строки.

> ты про Server Mode что ли? это несколько перпендикулярно обсуждаемому топику
Почему вдруг ? Экономия памяти, все такое.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956625
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochDevExpress должн завести у себя таблицу таких датасетов и как этот функционал включать ?нет конечно, упаси боже
им достаточно просто предоставить event handler типа OnGetDrawSyncDataSet(var Result: TDataSet) в к-м конечный пользователь грида (я) сможет предоставить датасет на к-й гридовые отрисовщики в случае включенного нового флага типа DrawSyncDataSet в DataModeController будут позиционировать этот датасет
а все новички за незнанием или неприменимостью данного продолжат юзать штатный способ
Ariochпри нарантированом использовании CDSпри использовании любого подходящего датасета с соответствующим функционалом. из общедоступных их минимум три. я уж не говорю про закрытые типа моего
Ariochдовольно узкая нишада что ты что ты
AriochПри этом вариант без CDS все равно проще и универсальнееразве что универсальнее
AriochAssert не катит - он отключиться может в релизетеперь ты меня на тестовом примере писать еще возьмешься учить?спасибо, я пас
AriochРечь не только про столбцы, но и про строкимне уже скучно стало, зануда
AriochПочему вдруг ? Экономия памяти, все такоеи это и кое-что еще но только server mode никак не меняет подходы к рассматриваемой в треде задаче
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37956882
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И всё таки, когда же ваш прославленный метод прогонки датасета догонит дополнительный столбец ???
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957123
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrИ всё таки, когда жекогда ты, двоечник, поумнеешь
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957139
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanкогда ты, двоечник, поумнеешь
Мне кажется, или это хамство выперает ?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957141
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

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

Проще тоже. Даже один только процитированный обработчик уже короче.
Код: pascal
1.
2.
3.
4.
 cds2.FindKey([AViewInfo.GridRecord.Values[0]]); // Assert не катит - он отключиться может в релизе
 v := (aviewinfo.item.DataBinding as TcxGridItemDBDataBinding).Field.AsInteger;
// vs
 v := AViewInfo.GridRecord.Values[AViewInfo.item.Index];



А ведь еще надо создать вторичный CDS и проклонировать его.

Ну и всегда остается вопрос кто будет это развивать через 5 лет, не поломает ли он это.


Поэтому да, так тоже можно при дестком контроле обвязки грида.
Но я пока не могу увидеть ни одного случая, где это было бы лучше.

а вообще меня cxGird удивил. Я знал что он тяжёлый - куча вложенный вирутальный вызовов, на каждый чих создаются и уничтожаются объекты типа TPainter и т.д. - но что настолько... Просто на перерисовке на Phenom2 x4 ожирает 10-16% поцессор, в пересчете на одно ядро - 40-70%, а если пересчитать на какой-нибудь одноядерный гигагерцовый целерон... грустно.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957688
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan AriochПочему вдруг ? Экономия памяти, все такоеи это и кое-что еще но только server mode никак не меняет подходы к рассматриваемой в треде задаче

Тут две задачи смешались. В моей речи про экономии памяти не было. Но ты продвигал вторичный dataset именно для экономии, чтобы не тратиться на скрытый столбец.

Вот я и представляю: cxGrid, server mode over DBX - и тут мы для экономии памяти вхреначиваем CDS
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957790
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа если пересчитать на какой-нибудь одноядерный гигагерцовый целерон... грустно.
На 486 вполне прилично работает
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957882
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спомнил одну историю поводу раскраски cxGrid . В Одной из моих систем в заказчике есть функционал, где пользователь(Админ) может выделить цвет для статуса абонента , что б система в гриде раскрасил таких абонентов.
Как то админ не знаю для прикола или не чайно поставил статусу ВИП = clBlack, вижу заказчик звонит мне и говорит что у них ВИП клиенты не отображаются в программе, а я в этот день обновление отправил им. Блин сразу ломка, думаю где я ошибся, открываю начинаю рыться в БД, смотрю пакеты макеты, процедуры который обновил. Ну блин вижу что все нормально должно быть, думаю не ужели полете внешний ключ и кто то удалил этот статус, захочу смотрю все есть. Блин в вобщем почти час на это, потом звоню говорю да блин все вроде должно работать, а он блин .... говорит ну не отображаются, есть записи черным цветом!!
И Банг!!! чуть я не взорвался и не начал ругать их)))
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957945
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramin
А белый шрифт на белом фоне - слабо ??? Ёпрст - данные все пропали !!!!!
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957948
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrRamin
А белый шрифт на белом фоне - слабо ??? Ёпрст - данные все пропали !!!!!
))))
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37957985
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrRamin
А белый шрифт на белом фоне - слабо ??? Ёпрст - данные все пропали !!!!!
Лучше прозрачным. И сетку прозрачным цветом тоже.

Вообще должны быть красные буквы зелёного цвета!
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37959888
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochодин только процитированный обработчик уже корочену так объедини две строчки в одну, если для тебя это сложно. и ты btw сравниваешь не пойми что, я такого не писал
Ariochеще надо создать вторичный CDS и проклонировать егоахренеть сложности
Ariochостается вопрос кто будет это развивать через 5 лет, не поломает ли он этоэтот вопрос остается всегда, вне зависимости от выбранного решения
Ariochтак тоже можно а совсем недавно тебе было "очевидно" что идея моя неудачна
Ariochя пока не могу увидеть ни одного случая, где это было бы лучшеработай над собой, расширяй кругозор про память я тебе уже разжевал. и вообще чем меньше завязок на специфики конкретного гуишного компонента и больше кладется на датасет тем лучше
Arioch но что настолько а я тебе говорил что ты заблуждаешься полагаясь на "бесплатность" девэксовских решений и веря в его эффективность
Ariochserver mode over DBX - и тут мы для экономии памяти вхреначиваем CDSserver mode с CDS не так уж много смысла имеет, т.к. CDS сам по себе позволяет как угодно изголяться с получением целевого набора данных. а dbx ваще в топку
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960194
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> ну так объедини две строчки в одну

Т.е. по твоему если взять программу на 100КБ исходников, удалиь все CR/LF, то получим программу сложности Hello World ?

> ахренеть сложности

Затраты больше нуля ? больше. Значит твой вариант сложнее.
Намного или нет - другой вопрос.

> совсем недавно тебе было "очевидно" что идея моя неудачна

Мне попрежнему очевидно, что для DevEx , которым нужно поддерживать любой TDataSet эта идея неудачна, пока они не смогут жёстко контролировать использование только CDS и только в режиме CloneCursor и отключать этот режим "шаг влево/шаг вправо", и пока они не убедятся, что у них наличествует достаточно много клиентов, для которых этот вариант будет хоть в чём-то лучше стандартного получения данных из аргументов обработчика события.

> про память я тебе уже разжевал.
при использовании CDS и хранении в памяти всей таблицы говорить про экономию памяти вообще как-то странно.
хочешь экономить память - убери CDS

> и вообще чем меньше завязок на специфики конкретного гуишного компонента
...и больше завязок на специфику конкретного CDS

> и больше кладется на датасет тем лучше
Если generic TDataset - то да.
А иначе - шило на мыло меняем.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960221
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Arioch
vavan - явный фанатик CDS
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960236
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochТ.е. по твоемуне фантазируй, по-моему синхронизировать датасет и взять данные из него ничуть не сложнее чем из датаконтроллера. ладно бы там вместо одной сто строк пришлось ввалить (при этом невозможно было бы их завернуть в вызов враппера) но когда их две (или даже десять) не вижу никакого усложнения. нет, если сложность для тебя меряется в кол-ве cr/lf то конечно мой метод ажно в два раза "сложнее"
AriochЗатраты больше нуля ?затраты чего?
AriochМне попрежнему очевидноа мне по-прежнему очевидно что ты неспособен как достаточно широко увидеть проблему так и мой подход к ее решению
Ariochпри использовании CDS и хранении в памяти всей таблицы говорить про экономию памяти вообще как-то странно.
хочешь экономить память - убери CDSво бред-то
Ariochбольше завязок на специфику конкретного CDSк-й во-первых есть штатный стандартный компонент, а во-вторых если делать по уму то можно было бы обойтись и без клона и добиться (при желании) работоспособности моего варианта с любым конкретным датасетом
AriochЕсли generic TDatasetт.е. именно с generic
Ariochиначе - шило на мыло меняеминаче ты берешься рассуждать о вещах про к-е недостаточно знаешь. даже в усеченном варианте я предложил простой способ предоставить необходимую точку входа для тех кому это может понадобиться и для них тоже очевидно что мой способ гораздо удачнее штатного
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960241
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr - явно недалекий товарищ
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960259
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ку да уж мне до далёких
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960314
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> для тех кому это может понадобиться и для них тоже очевидно что мой способ гораздо удачнее штатного
для всех тех одного человека ?

Кстати, как эта "точка входа" будет гарантировать, что датасет не затормозит программу, не выдаст ошибок, не выдаст некорректных устаревших рещзультатов поиска ?

> во-вторых если делать по уму то можно было бы обойтись и без клона и
> добиться (при желании) работоспособности моего варианта с любым конкретным датасетом
т.е. пусть дев-экспрессовцы потрахаются, только потому что тебе лень использовать стандартные средства. Я думаю, они откажутся "добиваться работоспособности".

> во бред-то
очень аргументировано. Бyдeшь отрицать, что в вышеприведенных примерах CDS держал в памяти все данные таблицы, а не только те, которые были на экране ?


> но когда их две (или даже десять) не вижу никакого усложнения.

ну да, 1=10, если очень хочется. ро то, что они будут размазаны по разным кускам программы - по разным событиям разных объектов - просто молчу.

> нет, если сложность для тебя меряется в кол-ве cr/lf
Не для меня, а для тебя. Это ты предлагал убирать CR/LF.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960377
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochдля всех тех одного человека ?с чего ты взял?
Ariochкак эта "точка входа" будет гарантироватьи с какой стати она должна что-либо гарантировать??
Ariochпусть дев-экспрессовцы потрахаются, только потому что тебе лень использовать стандартные средстваты делаешь неверные выводы базируясь на неверных же предположениях
AriochЯ думаю, они откажутсяи тут ты наконец-таки прав
Ariochочень аргументированоа ты все равно мои аргументы либо не видишь либо не воспринимаешь
AriochБyдeшь отрицатьнет конечно, с этим я и не спорил
Ariochну да, 1=10, если очень хочетсятут ниче не понял
AriochНе для меня, а для тебядля меня одинаково несложно как взять одной строкой данные из датаконтроллера так и нарисовать с десяток строк чтобы сделать это с помощью датасета
Ariochты предлагал убирать CR/LFну ты ж не формализовал своих критериев "сложности", обозначил лишь что более "короткий" обработчик "проще", вот тебе и способ "укорачивания", читай "упрощения" я конечно могу попытаться поверить что кроме этого тебя напугала "сложность" клонирования, но тогда мне о тебе совсем плохо придется думать
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960412
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> с чего ты взял?
с того, что я не видел других людей, кому это "необходимо".
и, судя по всему, девэкспрессовцы тоже не видели.

Более того, пока нет ни одного более-менее общего случая, когда этот способ вообще хоть чем-то лучше стандартного.
Ситуация, когда нам не жалко памяти, чтобы всосать в неё полностью таблицу, но жалко памяти чтобы добавить один 4-байтовый столбец, надуманная.

> и с какой стати она должна что-либо гарантировать?
с той, что иначе миллион леммингов, не умеющих искать примеры и читать исходники, именно так и сделают, да еще на каком-нибудь BDE tQuery.
и потом на всех форумах расскажут какой тормозной и падучий отстой QuantumGrid.
Зачем девэкспрессу это надо ?

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

у тебя интересное понятие слова "короткий"

а Length(string) у тебя тоже только CR/LF считает ???
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960494
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochс того, что я не видел других людей"этапять" (С) что еще из того что ты "не видел" по-твоему не существует?
Ariochсудя по всему, девэкспрессовцы тоже не виделилично я не заряжал им подобный suggestion лишь потому что хорошо знаю как у них дела обстоят и какой будет ответ. кроме того проблема не настолько критичная чтоб требовать от них поддержки в том что достаточно легко при необходимости реализуется на уже существующих обработчиках. хотя конечно жаль, было бы приятнее с поддержкой "искаропки"
Ariochнам не жалко памяти, чтобы всосать в неё полностью таблицуесли на клиенте требуется определенный набор данных в датасете то какие ты знаешь альтернативы? какие ты вообще знаешь датасеты поддерживающие window mode с произвольной навигацией и набором фич сравнимым хотя бы с cds?
Ariochжалко памяти чтобы добавить один 4-байтовый столбецоткуда взялся один 4-байтовый столбец ? что ты знаешь о внутренностях хранилища датаконтроллера? что если для нужд "разноцветного" отображения требуется доступ к строковому (или еще хуже LOB) полю? что если таких "невидимых" столбцов несколько? ты отдаешь себе отчет в тормознутости и прожорливости датаконтроллера в этих обстоятельствах?
Ariochнадуманная"надуманными" являются твои потуги всех постричь единообразно, без знаний какие в реальности бывают задачи
Ariochиначе миллион леммингов, не умеющих искать примеры и читать исходникиа чем ты, неумеющий читать мои ответы (где данный момент уже неоднократно обсуждался) отличаешься от того миллиона?
Ariochпотом на всех форумах расскажут какой тормознойа он и есть тормозной
Ariochотстой QuantumGrid.
Зачем девэкспрессу это надо ?и, действительно, в некоторых аспектах именно отстой. но лучше все равно ничего нет
AriochЗачем девэкспрессу это надо ?только при чем здесь это вообще? или ты на них работаешь и подписался отбиваться?
Ariochпочему 10 разных операций в разных местах где те 10 операций и мест в моем варианте, ты о чем?
Ariochу тебя интересное понятие слова "короткий"еще раз, пока ты не формализовал своего понятия я тебе отвечаю "по тексту"
AriochLength(string) у тебя тоже только CR/LF считает ???я никак не могу понять что ты пытаешься спросить но на всякий случай повторюсь, если ты измеряешь "сложность" тупо в кол-ве строк, то я не разделяю этой позиции
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960577
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тормознутость, прожорливость? Демо, пожалуйста.

> то если для нужд "разноцветного" отображения требуется доступ к строковому (или еще хуже LOB) полю?

Тем более, что сколько бы столбцов и по каким исходным данным ни надо было раскрасить, добавить достаточно ОДИН невидимый столбец.
Заполняемый в OnCalcFields.
Размером TRGB*кол-во-столбцов


> если на клиенте требуется определенный набор данных в датасете
сферический конь в вакууме. Я не предлагаю всегда и везде отказываться от CDS. Но использовать CDS с полностью загруженными данными и при этом экономить память на столбцах я считаю сродни заказу кока-колы без сахара в МакДаке.

> а он и есть тормозной
На порядок менее, чем при прямом использовании поиска в проиpвольном TDataSet.


> я тебе отвечаю "по тексту"
Только твое восприятие текста, прилагательного "короткий", плохо соотносится со словарями русского языка. ТЕкстмеряется не только в длину.

> если ты измеряешь "сложность" тупо в кол-ве строк
не я, а ты. Я не предлагал выбрасывать CR/LF в качестве уменьшения сложности.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37960606
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch, извини но я более не в силах продолжать с тобой нашу безнадежную и унылую "дискуссию"
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #37962250
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, так тему загадить, а :(
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Разукрасить ячейку в cxGrid
    #39705640
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня! Чтобы не плодить темы спрошу здесь.
В cxGrid вывожу сетку, разукрашиваю ячейки по условию, с верху идут дни месяца. Как мне покрасить бэнд с днями месяца, в зависимости от дня недели?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705644
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что именно не получается?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705649
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705681
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
Спасибо! Но что то не пошло
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TForm1.cxGrid1DBTableView1CustomDrawColumnHeader(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
begin
 if (AViewInfo.Column.Tag>0)  then

if DayOfWeek(EncodeDate(PlannerCalendar1.Year, PlannerCalendar1.Month, AViewInfo.Column.Tag))= 1 then
ACanvas.Brush.Color  :=clRed;
end;
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705683
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не закрашивает ячейки с именем столбца, хотя по условию выбирает правильно...
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705716
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest,

а я вот стили присваиваю нужного цвета ячейкам -- код примерно похожий с раскраской, только в качестве плюса -- в эксель красивая цветная форма экспортируется.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705730
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже раскрасил таблицу при помощи стилей, не могу раскрасить ячейки с именем столбца, не удобно ориентироваться, когда таблица закрашена, где выходные дни...
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705973
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые гуру! Возможно ли вообще выполнить задуманное? Переискал везде, ответа не нашел...
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705981
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем OnGetHeaderStyle не подходит?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705996
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zinpubА чем OnGetHeaderStyle не подходит?

Устаревает всем.
Ячейки таблицы я закрашиваю без проблем. Нужно закрасить имена столбцов...
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39705997
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jonybestzinpubА чем OnGetHeaderStyle не подходит?

Устаревает всем.
Ячейки таблицы я закрашиваю без проблем. Нужно закрасить имена столбцов...

Ячейки это - OnGetContentStyle
Заголовки - OnGetHeaderStyle

Или я не понимаю, что такое "имена столбцов" ?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39706029
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы уверены что у вас в AViewInfo.Column.Tag сидят разные значения ?
В обработчик OnCustomDrawColumnHeader вообще попадает ?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39706072
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBrВы уверены что у вас в AViewInfo.Column.Tag сидят разные значения ?
В обработчик OnCustomDrawColumnHeader вообще попадает ?
Да, проверял.
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39706141
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал даже без условий
Код: sql
1.
2.
3.
4.
5.
6.
procedure TForm1.cxGrid1DBTableView1StylesGetHeaderStyle(
  Sender: TcxGridTableView; AColumn: TcxGridColumn; var AStyle: TcxStyle);
begin

AStyle :=  cxStyle_sv;
end;


не закрашивает заголовки...
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39706154
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так понимаю, должны все заголовки покрасится? В стилях выбран красный цвет
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39706163
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jonybest,

Скины используются? NativeStyle не трю часом?
...
Рейтинг: 0 / 0
Разукрасить ячейку в cxGrid
    #39706185
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
таблица раскрашена стилями
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure TForm1.cxGrid1DBTableView1StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
  var
  a,s,d,i:integer;
  myDate : TDateTime;
//myYear, myMonth, myDay : Word;
begin

  if ARecord = nil then exit;
  if AItem = nil then exit;// эту проверку тоже полезно делать, если используете данный параметр
  if not ARecord.IsData then exit;

           if (AItem.Index>=1) and  (AItem.Index<=d+1)then  begin

            if ARecord.Values[AItem.Index] = 'От' then  AStyle:= cxStyle_ot;
            if ARecord.Values[AItem.Index ] = 'Б' then  AStyle:= cxStyle_B;
            if ARecord.Values[AItem.Index] = 'В' then  AStyle:= cxStyle_V;

            end;
...
Рейтинг: 0 / 0
101 сообщений из 101, показаны все 5 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разукрасить ячейку в cxGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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