Главная страница
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.034 c
2-1136965079
antonio_b
2006-01-11 10:37
2006.01.29
Indy


1-1135274897
Destroyer
2005-12-22 21:08
2006.01.29
Ожидание выгружения процесса


8-1124712445
S_Flash
2005-08-22 16:07
2006.01.29
Выполнить кропинг(срез) изображения?


6-1129721825
mmms
2005-10-19 15:37
2006.01.29
Передача файла по сети, D7


2-1136757545
Фродо )
2006-01-09 00:59
2006.01.29
Работы с большими таблицами данных.