Главная страница
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.04 c
4-1134593589
Free0n
2005-12-14 23:53
2006.03.05
Работа с реестром


1-1138372025
hawkins
2006-01-27 17:27
2006.03.05
ошибка в программе "Access violation at address..."


11-1120545625
Gaddy
2005-07-05 10:40
2006.03.05
Form1.Button1Click - ошибка?


3-1136903860
Silver...
2006-01-10 17:37
2006.03.05
Чтоб TADODataSet не записивал в БД но не режим ReadOnly


2-1139857337
аматор
2006-02-13 22:02
2006.03.05
выловить сообщения Indi клиента к серверу (чат)