Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
2-1136978527
dr D
2006-01-11 14:22
2006.01.29
Как распарсить строку (WideString)?


1-1135081724
Умом Россию не понять
2005-12-20 15:28
2006.01.29
Редактор свойства


15-1136745588
VirEx
2006-01-08 21:39
2006.01.29
<![CDATA[<


15-1136981804
Polevi
2006-01-11 15:16
2006.01.29
Песня


15-1136315155
Yeg
2006-01-03 22:05
2006.01.29
Интернет, PC и PocketPC