Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
3-1133512349
salexn
2005-12-02 11:32
2006.01.29
Ассинхронное получение данных в TClientDataSet


9-1124442252
Sos
2005-08-19 13:04
2006.01.29
progresbar


1-1134902392
Игорь Степанов
2005-12-18 13:39
2006.01.29
Уделение изображения курсора из клетки StringGrid после ввода в к


6-1127938364
Klim
2005-09-29 00:12
2006.01.29
Проблема создания TServerSocket


15-1136301212
oldman
2006-01-03 18:13
2006.01.29
Перспективы развития железа.




   Наверх