Главная страница
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.043 c
6-1132238881
Stealth
2005-11-17 17:48
2006.03.05
TCP клиент Indy в Delphi 2005


15-1139052861
Kerk
2006-02-04 14:34
2006.03.05
Оценка качества создания сайта


6-1132634383
hed
2005-11-22 07:39
2006.03.05
Передача файла на apache сервер


15-1139810667
Ega23
2006-02-13 09:04
2006.03.05
С Днём рождения! 12 февраля


1-1138610190
Альф
2006-01-30 11:36
2006.03.05
Заполнение свойств класса из XML