Главная страница
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.036 c
2-1136900169
Alexey__
2006-01-10 16:36
2006.01.29
Клик мышкой


8-1124103284
<<BEAST>>
2005-08-15 14:54
2006.01.29
Частота звука.


15-1136837731
WuBuGuDu
2006-01-09 23:15
2006.01.29
Обращение к объектам в runtime


2-1136967239
Dmitrij_K
2006-01-11 11:13
2006.01.29
RichEdit. Непонимаю


2-1137073361
Barsky
2006-01-12 16:42
2006.01.29
Проблема с DBGrid