Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выделение строк в DBGrid [D7, MSSQL]


Белочка ©   (2008-06-10 07:26:00) 

Доброе утро.

Не нашла информации по этой теме, поэтому хотелось бы спросить реально ли это сделать и если да, то как

У меня база на SQL Server 2000. Я связываю его с дельфи через ADO и вывожу информацию в DBGrid. Можно ли раскрасить строки таблицы по какому-нибудь признаку.

Например я вывожу в DBGrid поля id, name, count(distinct item), причем у последнего столбца свойство visible = false. Нужно всем строкам, у которых count(distinct item) > 10 сделать одного цвета (заливка/шрифт или еще как-нибудь - не важно), а оставшиеся можно оставить такими, какие они есть. Можно так сделать?


stas   (2008-06-10 13:24:00) [1]

MsGuns ©   (10.06.08 13:05) [10]

при отрисовке грида датасет прокручивается.
TDBGrid(Sender).DataSource.DataSet -
это более универсально не спорю, у меня такой надобности не возникало.


MsGuns   (2008-06-10 13:05:00) [2]

>ЮЮ ©   (10.06.08 12:52) [9]

Спасибо за пояснение. ;))


ЮЮ   (2008-06-10 12:52:00) [3]

> Я полагал, что обращение к датасету таким образом всегда
> будет адресоваться к ТЕКУЩЕЙ записи датасета, а не ко всем
> отображаемым в сетке.


TDBGrid(Sender).DataSource.DataSetи tbSpsostэто один и тот жн датасет. (при соответсветствующих настройках, естественно).
А текущая запись датасета (в обработчике рисования) соответствует именно рисуемой записи.


MsGuns   (2008-06-10 12:48:00) [4]

Смущает выделенное в [3]
Я полагал, что обращение к датасету таким образом всегда будет адресоваться к ТЕКУЩЕЙ записи датасета, а не ко всем отображаемым в сетке.
Я делал так:

CLb:= TDBGrid(Sender).DataSource.DataSet.FieldByName('CVET').AsInteger;

Кстати в вішеупомянутой статье используется именно "мой" способ ;)


stas   (2008-06-10 12:32:00) [5]

В приведенном мной примере красятся все строки, в цвет, код котого записан в tbSpsost.FieldByName('CVET').AsIntegerТекущая красится в clHighLight.
Непонимаю что смущает?


MsGuns   (2008-06-10 12:27:00) [6]

>А в чем вопрос?

Вопрос задан. Поясню. Отмечаются все строки, записи в которых удовлетворяют условию выделения или только текущая ?
Ответа нет.


stas   (2008-06-10 12:10:00) [7]

MsGuns ©   (10.06.08 09:04) [3]
А в чем вопрос?


Плохиш   (2008-06-10 10:32:00) [8]


> Белочка   (10.06.08 07:26)  
> Не нашла информации по этой теме

Так и говори, что и не искала.
Твой вопрос в яхуу и первая же ссылка.


MsGuns   (2008-06-10 09:04:00) [9]

>stas ©   (10.06.08 08:50) [2]
>CLb:= tbSpsost.FieldByName('CVET').AsInteger;

И реально "полосатый" ?


stas   (2008-06-10 08:50:00) [10]

событие в гриде onDrawColumnCell
procedure TfmSpSost.DBGridEh1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumnEh;
 State: TGridDrawState);
Var Clb,Clf:TColor;
  begin
CLb:=tbSpsost.FieldByName('CVET').AsInteger;
clf:=clWhite-clb;
TDBGrideh(Sender).Canvas.Brush.Color:=clb;
TDBGrideh(Sender).Canvas.Font.Color:=clf;

// выделение
IF  gdSelected IN State
Then Begin
TDBGrideh(Sender).Canvas.Brush.Color:= clHighLight;
TDBGrideh(Sender).Canvas.Font.Color := clHighLightText;
End;
// отрисовка
TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;


Sergey13   (2008-06-10 08:34:00) [11]

> [0] Белочка   (10.06.08 07:26)
> Не нашла информации по этой теме

Поищи на королевстве Делфи статью "Полосатый грид".


Наверх

Титульная страница Поиск, карта сайта Написать письмо