Bikin Checkbox di Dbgrid

Seringkali kita ingin membuat pilihan data dari database untuk dipilih dan dijadikan dasar untuk data berikutnya. Dalam kasus ini saya ingin mencontohkan sebuah perusahaan dagang yang mingirimkan barang. Satu pengiriman terdiri atas beberapa tagihan (invoice). Jadi satu kali pengiriman bisa berisi beberapa faktur/invoice. Disini Invoice dipilih dulu setelah dipilih maka digabung menjadi 1 pengiriman


Untuk membuat interfacenya di Delphi kita tampilkan dbgrid invoice, lalu dipilih mana-mana yang mau dikirim saat itu, kemudian setelah dipilih maka akan tampil form pengiriman yang terdiri atas invoice-invoicenya yang dipilih tersebut. Permasalahannya bagaimanakah cara membuat checkbox didbgrid tersebut?

Caranya adalah sbb

Klik komponen DBGRID
pada event double klik oncellclick, lalu ketikan kode dibawah ini


if Self.DBGrid.SelectedField.DataType = ftBoolean then
   SaveBoolean();


pada event oncolenter, ketikan kode dibawah ini

  if Self.DBGrid.SelectedField.DataType = ftBoolean then

 begin
      Self.FOriginalOptions := Self.DBGrid.Options;
      Self.DBGrid.Options := Self.DBGrid.Options - [dgEditing];
 end;

Pada event oncolexit, ketikan kode dibawah ini

    if Self.DBGrid.SelectedField.DataType = ftBoolean then
       Self.DBGrid.Options := Self.FOriginalOptions;



Pada event DrawColumnCell, kodenya sbb, ikuti dan sesuaikan


procedure TNamaForm.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

   Const
     CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,
     DFCS_BUTTONCHECK or DFCS_CHECKED);
var
 CheckBoxRectangle : TRect;

begin

 if Column.Field.DataType = ftBoolean then

 begin

 Self.DBGrid.Canvas.FillRect(Rect);

 CheckBoxRectangle.Left := Rect.Left + 2;

 CheckBoxRectangle.Right := Rect.Right - 2;

 CheckBoxRectangle.Top := Rect.Top + 2;

 CheckBoxRectangle.Bottom := Rect.Bottom - 2;

 DrawFrameControl(Self.DBGrid.Canvas.Handle,

      CheckBoxRectangle,

      DFC_BUTTON,

      CtrlState[Column.Field.AsBoolean]);

 end;

end;



Lalu buatlah Procedure dengan nama SaveBoolean (jangan lupa deklarasikan juga)


procedure TNamaForm.SaveBoolean;
var pilihan:integer;
begin

//contoh disini nama datasourcenya DsListInvoice

    if not(DsListInvoice.DataSet.State in [dsEdit]) then
         DsListInvoice.DataSet.Edit;


  if Self.DBGrid.SelectedField.AsBoolean=false then
  begin
     {pada saat membuat tabel yang Anda inginkan, tambahkan kolom dengan nama selected untuk flag pilih ya atau tidak, disini 1 berarti true dan 0 berarti false}

     Table1selected.AsInteger:=1;
  end
  else
     Table1selected.AsInteger:=0;

end;

Contoh tersebut bisa diterapkan di aplikasi lain yang membutuhkan checkbox pada DBGRID di Delphi

OK Selamat mencoba

9 komentar:

Joko Rivai mengatakan...

Mantab bang tips nya. Ditunggu yang berikutnya :)

Admin mengatakan...

sama-sama Pak Joko, saya dengar Pak Joko punya software house yah? Selamat yah Pak Joko Rivai smoga usahanya makin sukses

Hendry Fadillah mengatakan...

bang...mohon pencerahan, gimana agar saat kita refresh dbgrid setelah di update, row select nya tetap pada row yang diupdate, g naik ke atas, saya pake delphi 6...., trims

Hendry Fadillah mengatakan...

bang...mohon pencerahan, gimana agar saat kita refresh dbgrid setelah di update, row select nya tetap pada row yang diupdate, g naik ke atas, saya pake delphi 6...., trims

Anonim mengatakan...

kalau untuk unidbgrid bawaan unigui kok tidak bisa ya......

Anonim mengatakan...

kalu chcekbox ad 9, gimana solusinya. thks

Anonim mengatakan...

kalo nambah tombol select all gmana yah.. jadi kalo maw milih semua tinggal klik tombolnya dan semua tercek mohon pencerahan

Admin mengatakan...

Biasanya main di variabel atau dbgrid.selected.index

Wahyu Fitriansyah mengatakan...

akang mau tanya maksudnya "ftboolean" apa ya punya saya errornya disitu "ftboolean"

Baca Juga