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

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

TEhLib [D7, XP]


nap<> ©   (2006-02-20 08:36:00) 

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


msguns   (2006-02-20 09:39:00) [1]

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


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

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


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

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


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

Создаешь вычисляемое поле 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;


nap&lt;&gt;   (2006-02-20 08:57:00) [5]

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


Наверх

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