Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

DBGrid - не отрисовывать запись по условию в вычисляемом поле   Найти похожие ветки 

 
alex_1234 ©   (2005-11-29 10:58) [0]

К сожалению нельзя фильтровать по вычисляемым полям....
А хочется....
Придумал попробовать сделать следующий финт ушами:
в событии DBGrid1DrawColumnCell проверять условие, и если надо, то просто не отрисовывать текущую запись. Примерно так (оно не работает):

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if ((Query1FAKTOSTATOK.AsInteger=0) and (CheckBox1.Checked)) then Exit;//ВСЕ РАВНО, ГАД, ОТРИСОВЫВАЕТ!!!!
  IF Query1FAKTOSTATOK.AsInteger=0 then
  Begin
//      TDBGrid(Sender).Canvas.Brush.Color:=clGreen;
     TDBGrid(Sender).Canvas.Font.Color:=clRed;
  End;
// если строка была выделена, оставляем "подсвеченные" цвета  
IF  gdSelected   IN State
Then Begin
  TDBGrid(Sender).Canvas.Brush.Color:= clHighLight;
  TDBGrid(Sender).Canvas.Font.Color := clHighLightText;
 End;
// А теперь пусть он рисует сам !
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

Кусок кода взят из статейки "Разноцветный грид".....
Query1FAKTOSTATOK - вычисляемое поле по данным другого запроса.
CheckBox1 - галка "Показывать только >0"
В чем собака порылась?


 
Sergey13 ©   (2005-11-29 11:00) [1]

OnFilterRecord попробуй.


 
alex_1234 ©   (2005-11-29 11:57) [2]

Не выходит каменный цветок...
На момент события

procedure TForm1.Query1FilterRecord(DataSet: TDataSet;
 var Accept: Boolean);
begin
  Accept:=DataSet.FieldByName("FAKTOSTATOK").AsInteger>0;
end;

DataSet.FieldByName("FAKTOSTATOK").AsInteger ВСЕГДА равно нулю...
Поля я считаю следующим макаром:

procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
//вычисление полей
  if Query2.Locate("cardarticu",Query1ARTICUL.AsString,[loCaseInsensitive]) then
     Query1PRODZASMENU.AsInteger:=Query2kol.AsInteger
  else
     Query1PRODZASMENU.AsInteger:=0;
  Query1FAKTOSTATOK.AsInteger:=Query1ADDNUM1.AsInteger-Query1PRODZASMENU.AsInteger;
end;


 
Sergey13 ©   (2005-11-29 12:02) [3]

А что мешает выполнить код (адаптированный конечно) из TForm1.Query1CalcFields в TForm1.Query1FilterRecord?


 
alex_1234 ©   (2005-11-29 12:09) [4]

Вы ГЕНИЙ!!!
ОНО ЗАРАБОТАЛО!!!


 
Sergey13 ©   (2005-11-29 12:11) [5]

2 [4] alex_1234 ©   (29.11.05 12:09)
Сообщи это моему начальнику. А то он не в курсе. 8-)


 
evvcom ©   (2005-11-29 12:13) [6]

УР-РА!!!! :-)


 
Виталий Панасенко   (2005-11-29 12:39) [7]

Да, ларчик то просто открывался..:-)))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
1-1135353216
Zirus
2005-12-23 18:53
2006.01.29
Динамически создаю CheckBox на GroupBox. Как исключить моргание?


1-1135167580
DVM
2005-12-21 15:19
2006.01.29
Проблема в многопоточном приложении: завершение потоков.


4-1132082130
АртемК
2005-11-15 22:15
2006.01.29
Отправить почту


2-1136725283
VeB
2006-01-08 16:01
2006.01.29
HTML ссылка


4-1132543193
hed
2005-11-21 06:19
2006.01.29
Как можно узнать какое приложение запустило мою программу?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский