powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разукрасить ячейку в cxGrid
25 сообщений из 101, страница 3 из 5
Разукрасить ячейку в 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
25 сообщений из 101, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разукрасить ячейку в cxGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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