Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Виртуальное поле [D5, IB5.x]


малой ©   (2002-06-05 11:57:00) 

Необходимо создать виртуальное поле, содержащее 0 или 1, чтобы при нажатие на ячейку в гриде менялось содержимое на противоположное, т.е. 0 на 1, 1 на 0.

Еще раз: этого поля в базе нет. Как это сделать?


Johnmen   (2002-06-06 09:26:00) [1]

Все несколько проще :

1.Создаешь поле char(1), в котором м.б. "0" или "1"
2.В гриде OnDrawDataCell отрисовываешь в соотв.колонке, напр."галочку", если "1", ничего - если "0"
3.Обрабатываешь OnMouseDown, OnKeyDown, чтобы менять "0"->"1" и наоборот.


skiph   (2002-06-06 04:59:00) [2]

А можно вставить ComboBox в DBGrid.

Type TColumnAction = (caNotes, caGraphic, caCheck , caLength, caNone);

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var CheckIt : Boolean;
Style : Integer;
begin
CheckIt := {выражение, которое определяет выставлена галочка или нет}
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);
// Temp - вспомогательная колонка, в которой и происходит
//прорисовка. Хоть она и вспомогательная, но она должна быть
// привязана к реальному полю таблицы иначе вылетит
if CompareText(Column.FieldName, "TEMP") = 0
then begin
IF CheckIt
Then Style := DFCS_CHECKED
Else Style := DFCS_BUTTONCHECK;
DrawFrameControl(TDBGrid(Sender).Canvas.Handle, Rect, DFC_BUTTON, Style);
end;
end;


малой   (2002-06-05 12:22:00) [3]

Спасибо, попробую


Val   (2002-06-05 12:21:00) [4]

не нужно делть CalculatedField - не поможет. Воспользуйтесь запросом по совету Lusha © (05.06.02 12:11)


малой   (2002-06-05 12:15:00) [5]

Можно добавить поле FieldKind:=fkCalculated, но не могу менять значение, кроме как в OnCalcFields, но как это сделать ума не приложу


yozhik   (2002-06-05 12:14:00) [6]

используй CalculatedField


Lusha   (2002-06-05 12:11:00) [7]

>малой (05.06.02 11:57)
SELECT Field1, Field2, ..., 0 AS VirtualField FROM TABLE1...


Kaban   (2002-06-05 12:08:00) [8]

А в чем проблема:
есть допустим TQuery, у него есть TField, метод Add
конечно не проверял, но, по идее, должно работать


Наверх

Титульная страница Поиск, карта сайта Написать письмо