Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2012, 15:29   #1
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
Лампочка DBGrid изменение цвета ячейки

Добрый вечер, знаю что тем с таким заголовком очень много. Но у меня действительно интересная ситуация. Обращаюсь к вам только потому что сам ничего придумать не в состоянии.
Есть два DBGrida, оба хранят одинаковую коллекцию столбцов, но он расположены в разной последовательности. Также в таблицах хранятся данные которые нужно между собой сравнивать.
То чего я добился:
Скрываю столбцы первой страницы, затем берем первый столбец первой таблицы и ищем столбец с таким же названием во второй таблице. И сравниваю значения. Если они не совпадают, делаю текущий столбец первой таблицы видимым.
Но этого мало, мне взбрело в голову, что ячейки в первой таблице, которые содержат не совпадающие значения можно окрашивать в разные цвета. Но вот вызывать метод ColumnCellDrawing в цикле нельзя. Надеюсь, я все правильно сформулировал, и вы заинтересуетесь этим вопросом.
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 23.04.2012, 15:33   #2
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
По умолчанию

Ах да, забыл добавить, что пишу в RAD Studio
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 23.04.2012, 15:59   #3
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

В OnDrawColumnCell

Код:
if(((DBGrid*)Sender)->DataSource->DataSet->FieldByName("Name")->AsString() == "S.T.U.D.E.N.T" )
{
   ((DBGrid*)Sender)->Canvas->Brush->Color = clRed; //закрасим ячейку в красный цвет
if(State.Contains(gdSelected)) // выделенные ячейки закрашиваем как обычно
   {

		  ((DBGrid*)Sender)->Canvas->Brush->Color = clHighlight;
		  ((DBGrid*)Sender)->Canvas->Font->Color = clHighlightText;
   }

((DBGrid*)Sender)->Canvas->FillRect(Rect);

//включим прорисовку грида
((DBGrid*)Sender)->DefaultDrawColumnCell(Rect, DataCol, Column, State);

}
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 23.04.2012 в 16:38.
Krok27 вне форума Ответить с цитированием
Старый 24.04.2012, 07:42   #4
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
По умолчанию

Цитата:
Код:
if(((DBGrid*)Sender)->DataSource->DataSet->FieldByName("Name")->AsString() == "S.T.U.D.E.N.T" )
Видите ли название столбца я нахожу по индексу который перебираю в цикле

Код:
for(int t=1;t<ADOQuery8->FieldCount;t++)
{
 //перебираю все столбцы второй таблицы
 for(int m=1;m<frmMain->ADOQuery2->FieldCount;m++)
 {
  //если названия двух столбцов совпадают
  if(DBGrid5->Columns->Items[t]->Title->Caption==frmMain->DBGrid1->Columns->Items[m]->Title->Caption)
  {
   //сравниваю их содержимое
   if(DBGrid5->Fields[t]->Text!=frmMain->DBGrid1->Fields[m]->Text)
   {
А вызывать прорисовку в цикле нельзя, потому что таблица начинает жутко мигать
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 24.04.2012, 11:19   #5
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Сходу придумалось пока только это:
в DBGrid5DrawColumnCell
Код:
for(int i=0;i<frmMain->DBGrid1->DataSource->DataSet->FieldCount;++i)
	{
		if(Column->Title->Caption == frmMain->DBGrid1->Columns->Items[i]->Title->Caption)
			if(Column->Field->Text == frmMain->DBGrid1->Fields[i]->Text)
			{
				((TDBGrid*)Sender)->Canvas->Brush->Color = clRed;
				((TDBGrid*)Sender)->Canvas->Font->Color = clHighlightText;
				break;
			}
	}
	((TDBGrid*)Sender)->Canvas->FillRect(Rect);
	((TDBGrid*)Sender)->DefaultDrawColumnCell(Rect, DataCol, Column, State);
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 24.04.2012, 12:44   #6
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
По умолчанию

Cпасибо, очень помогли.
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 24.04.2012, 13:21   #7
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Всегда пожалуйста.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение значения ячейки DBGrid a_n_n_a БД в Delphi 1 24.03.2011 13:26
Изменение цвета ячейки содержащей формулу LexxSakhalin Microsoft Office Excel 7 07.09.2010 14:36
изменение цвета MaXoN66613 Помощь студентам 2 02.06.2010 18:56
Изменение цвета girz Общие вопросы Delphi 6 30.05.2009 13:43
Изменение цвета Artem Общие вопросы Delphi 5 12.07.2007 09:07