Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/52: Рейтинг темы: голосов - 52, средняя оценка - 4.92
Xes
4 / 4 / 2
Регистрация: 10.05.2008
Сообщений: 22
1

Раскрасить строки DbGrid

14.05.2008, 19:35. Просмотров 10033. Ответов 1
Метки нет (Все метки)

Подскажите как выделить строки с одинаковым содиржимиым допустим есть следйющие строки

1
2
2
7
8
9
5
8

Возможно ли раскрасить одинаковые строки Dbgrid в соответствующие оттенки цветов. Вот нашел такой пример пытался переработать, перебирал с помощю цыклов значения но чего не получилось кроми зацикливания и бесконечыной раскраски.
Здесь мы будем использовать событие "OnDrawColumnCell". Следующий пример разукрашивает ячейки колонки "Status" когда значение НЕ равно "a".
Если Вы хотите закрасить целую линию, то достаточно удалить условие "If..." (смотрите ниже)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
DataCol: Integer; Column: TColumn; 
State: TGridDrawState); 
const 
clPaleGreen = TColor($CCFFCC); 
clPaleRed = TColor($CCCCFF); 
begin 
 
If Column.FieldName = 'Status' then //Удалите эту линию, если хотете закрасить целую линию 
 
If Column.Field.Dataset.FieldbyName('Status').AsStrin g <> 'a' 
then 
If (gdFocused in State) //имеет ли ячейка фокус? 
then dbgrid1.canvas.brush.color := clBlack //имеет фокус 
else dbgrid1.canvas.brush.color := clPaleGreen; //не имеет фокуса 
 
//Теперь давайте закрасим ячейку используя стандартный метод: 
dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column, State) 
end;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2008, 19:35
Ответы с готовыми решениями:

Вывод на печать одной строки из DBGrid
Здравствуйте. Подскажите как мне вывести на печать одну выбранную строку из DBGrid ???

Как при нажатии на Button изменить цвет строки в DBGrid?
Как при нажатии на Button изменить цвет строки в DBGrid. К примеру есть условие если первый...

Раскрасить элементы синим цветом
Заполнить одномерный массив из 15 элементов целыми числами. Раскрасить при выводе синим цветом...

Раскрасить DBGrid
Добрый день, уважаемые! Возник такой вопрос: Delphi 7, БД - access. Исходные данные (таблица SP)...

Из dbGrid вывести выбранные строки в другой DbGrid
Мне надо вывести Из dbGrid вывести выбранные строки в другой DbGrid, например есть 100 записей в...

1
Xes
4 / 4 / 2
Регистрация: 10.05.2008
Сообщений: 22
16.05.2008, 00:13  [ТС] 2
1)Вот что наработал подскажите дальше, привожу полностью текст из двух постов а то видимо не понятно объяснил что хочу в первом посте, судя по ответам на другом форуме.
Подскажите как доработать програмуя сделал так
в результате запросов я получаю эти числа котрые надо выделить и присваеваю их переменной вариант.
тоесть если есть столбец с числами 1,2,2,1,5,7,12,4 то я получу переменную "а" типа вариант и в ней я так понимаю содержаться числа 2 и 1.
Как впихнуть уже известные значения ячейки которую надо красить в саму процедуру не знаю. Вторая процедура по клику кнопки создает этот вариант "а" .
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
clPaleGreen = TColor($CCCCFF);
clPaleRed = TColor($CCCCFF);
begin
for i:=0 to (Длина масива) do 
begin
if Column.Field.DataSet.FieldByName('Позиция').AsInte ger=a[i] then
if (gdFocused in State) then
dbgrid1.canvas.brush.color := clBlack //имеет фокус
else
dbgrid1.canvas.brush.color := clPaleGreen; //не имеет фокуса
dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column, State);
end;
end;
 
procedure TForm1.Button12Click(Sender: TObject);
var a:Variant;
begin
QExecOpenSQL(1, 1, 'select nt from draw2 where kol>1'); // Тут мы имеем результат запроса виде таблицы в которой имена одинаковы чисел: 1 2
a:=DataModule1.Query1.FieldByName('nt').AsVariant; 
// Button1.Caption:=VarToStr(a);
end;
1. У меня не получается преобразовать "а" в вариантный масив и загнать его в процедуру раскраски.
2. Расположить запрос внутри процедуры
TForm1.DBGrid1DrawColumnCell тоже не льзя ругаеться. Ghjwtlehe получение масива одинаковых чисел, надо повесить на кокое то событие связанное с изменением содержимого DBGRid, которое наступает раньше чем его раскраска. А потом загнать полученый масив a[i]-ых в процедуру DBGrid1DrawColumnCell для раскраски этих строк.

2)Сложность не в раскраски ячейки с номером "2", а сложность в том чтобы узнать что ячеек с номером "2" встречаеться больше чем 1 раз и тогда их раскрасить. Тоесть два столбца полученых в врезультате запроса Qeri1 отображаються в ДБГриде:
1 Квдрат 25*25
2 Диаметр Д16
2 Диаметр Д25 (В одной поззиции только один инструмент)
17 Прям 15*123
5 Круг 14

Во 2-ой позици стоит два разных инструмента этого не может быть. значит надо выделить эти строки красным. вот и проблема узнать строки с каким значением надо выделить.
Я их узнаю в результате проведения запросов, в итоге выполнения запроса через Qery2, я имею столбец одинаковых (повторяющихся) значений тоесть резултат запроса таблица в данном случае только одно число 2. Если повторяющихся чисел больше то соответственно столбец содержит эти повторяющиеся числа
2
23
14

Можно тупо вывести ссобщение в Label что мол в позициях 2, 23, 14 инструмент пересикаеться что не допустимо.
Либо попытаться загнать полученые числа в Form1.DBGrid1DrawColumnCell.

В этой процедуре я присвоил значение переменной "а" вариант значение поля с теми числами которые надо раскрасить.
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button12Click(Sender: TObject);
var a:Variant;
begin
QExecOpenSQL(1, 1, 'select nt from draw2 where kol>1'); (<- Это короче процедура чтобы по сто раз не не писать открыь и не закрыь Кверю, выполняет запрос в результате которого мы имеем столбец того что надо красить) 
a:=DataModule1.Query1.FieldByName('nt').AsVariant; 
// Button1.Caption:=VarToStr(a);
end;
Теперь я думаю переменную "a" вариант надо преобразовать в масив и какимто образом загнать в процедуру
procedure TForm1.DBGrid1DrawColumnCell
и в цикле перебрать эти значения и раскрасить DBGRID.

Вобщем проблема знаем что красить, но не знаем как занести эту информацию в процедуру раскраски, подсобите если кто знает как это сделать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2008, 00:13

Добавление строки в dbgrid
Подскажите пожалуйста, как добавить записи? в DBGrid выводится БД с несколькими столбцами, в...

Выделение строки в DBGrid
Как по нажатию кнопки выделить нужную мне строку в DBGrid?

Добавление строки в DBGrid
Привет всем. Есть SQL Server2005. Там база SD с таблицей tUsers, поля UserLogin, UserPass,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru