|
#1
|
|||
|
|||
DBGrid (CheckBox)
День добрый форумчане!
Возникла необходимость реализовать механизм - выбор одной ли нескольких записей в 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; |
#4
|
||||
|
||||
Вот пример, почти то, что надо, разбирайтесь на здоровье
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |