Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c