![]() |
|
|
#1
|
|||
|
|||
|
День добрый форумчане!
Возникла необходимость реализовать механизм - выбор одной ли нескольких записей в DBGrid (dxDBGrid) checkbox'ом для последующей их обработки (Insert/Edit/Remove) К примеру: в Grid-е есть поле (checkbox), в котором можно было поставить галочку (или несколько галочек), а потом, все это обработать поля, которые были отмечены пользователем. Это не сложный dbgrid. В запрос добавляется фиктивное поле , скажем 0 as checkbox и выводится первым столбцом. |
|
#2
|
||||
|
||||
|
А в чём собсно вопрос-то хоть, как всунуть птису в таблицу что-ли? Заведите в ней логическое поле, а дальше смотрим в DRKB (00388):
CheckBox в DBGrid Код:
procedure DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean); var DrawFlags: Integer; begin Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' '); DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT); DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK if Checked then DrawFlags := DrawFlags or DFCS_CHECKED; DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags); end; Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.FieldName = 'WEIGHT' then // Модифицируйте под себя
if Column.Field.AsInteger > 10 then
DrawGridCheckBox(DBGrid1.Canvas, Rect, true)
else
DrawGridCheckBox(DBGrid1.Canvas, Rect, false)
end;Код:
procedure TfrmMain.DBGrid1ColEnter(Sender: TObject);
begin
with TDBGrid(Sender) do
if SelectedField.FieldName = 'Weight' then // Модифицируйте под себя
Options := Options - [dgEditing]
else
Options := Options + [dgEditing]
end;![]() |
|
#3
|
|||
|
|||
|
Что не понятного? Есть dbGrid в нём один из столбцов (checkbox). Пользователь может выбрать одно или несколько строк, отметив "галочкой" нужные поля.
P.S. Кстати как сделать проверку отмечены поля или нет. К примеру: Код:
if dmMain.qFindSubscribers.FieldByName('checked').Value <> 1 then
begin
MessageBox(Application.Handle,
PAnsichar('Не выбрано ни одного поля'),
PAnsiChar(Self.Caption),
MB_OK + MB_ICONINFORMATION);
dbgFindSub.SetFocus;
Exit;
end; |