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

Вниз

TEhLib   Найти похожие ветки 

 
nap<>   (2006-02-20 08:36) [0]

Можно ли  в DbGrid сделать непривязанное к полю в таблице колонку с CheckBox И потом полбчить оттуда зачение


 
nap<>   (2006-02-20 08:57) [1]

Подскажите плиз очень надо!!!!


 
КаПиБаРа ©   (2006-02-20 09:03) [2]

Создаешь вычисляемое поле Check.
В списке отмечаешь ID выделенных строк.
FListSelect: TList;

При отрисовке ячейки поля Check проверяешь наличие элемента в списке и рисуешь галочку.
procedure TClientForm.dbgCargoDrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
var
 Style: Integer;
begin
 if not (qryCargo.Active and (qryCargo.RecordCount <> 0)) then
   Exit;
 //  State := State - [gdFixed];
 if CompareText(Column.FieldName, "Check") = 0 then
 begin
   if FListSelect.IndexOf(Pointer(TDBGrid(Sender).DataSource.
     DataSet.FieldByName(_fIdnCargo).AsInteger)) >= 0 then
     Style := DFCS_CHECKED
   else
     Style := DFCS_BUTTONCHECK;
   DrawFrameControl(TDBGrid(Sender).Canvas.Handle, Rect, DFC_BUTTON, Style);
 end;
end;

При нажатии на ячейку добавляешь строку в список
procedure TClientForm.dbgCargoCellClick(Column: TColumn);
var
 i, j: Integer;
 Cell: TGridCoord;
 p: TPoint;
begin
 if not (qryCargo.Active and (qryCargo.RecordCount <> 0)) then
   Exit;
 p := dbgCargo.ScreenToClient(Mouse.CursorPos);
 Cell := dbgCargo.MouseCoord(p.X, p.Y);
 if Cell.X >= 0 then
   if dbgCargo.Columns[Cell.X].FieldName = "Check" then
     SelRow;
end;

procedure TClientForm.SelRow;
var
 i: integer;
begin
 if (not qryCargo.Active) or (qryCargo.RecordCount = 0) then
   Exit;
 i := qryCargo.FieldByName(_fIdnCargo).AsInteger;
 if FListSelect.Count > 0 then
 begin
   if FListSelect.IndexOf(Pointer(i)) >= 0 then
   begin
     FListSelect.Delete(FListSelect.IndexOf(Pointer(i)));
     FSumm := FSumm - qryCargo.FieldValues[_fPayment];
     FOpl := FOpl - qryCargo.FieldValues[_fPayAll];
   end
   else
   begin
     FListSelect.Add(Pointer(i));
     FSumm := FSumm + qryCargo.FieldValues[_fPayment];
     FOpl := FOpl + qryCargo.FieldValues[_fPayAll];
   end;
 end
 else
 begin
   FListSelect.Add(Pointer(i));
   FSumm := FSumm + qryCargo.FieldValues[_fPayment];
   FOpl := FOpl + qryCargo.FieldValues[_fPayAll];
 end;
 dbgCargo.Refresh;
 CalcSumm;
end;


 
Patrick   (2006-02-20 09:05) [3]

Можно создать в датасете вычисляемое поле (как бы виртуальное) в событии OnCalcRecord его как надо инициализировать, ну и в дальнейшем использовать его как надо.


 
nap<>   (2006-02-20 09:31) [4]

Спасибо большое!!!


 
msguns ©   (2006-02-20 09:39) [5]

Field.OnGetText значительно проще имхо.



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.042 c
2-1140297348
Alex_C
2006-02-19 00:15
2006.03.05
Перехват нажатия клавиш


15-1139383853
Kerk
2006-02-08 10:30
2006.03.05
ФСБ вербует артистов


1-1138377429
Juice
2006-01-27 18:57
2006.03.05
Язык макросов Rave Reports


2-1140275296
VAZMan
2006-02-18 18:08
2006.03.05
Регистрация пользователя


2-1140169902
Lexiy
2006-02-17 12:51
2006.03.05
опять dbf и запись в него