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 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
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
10 komentar:
Mantab bang tips nya. Ditunggu yang berikutnya :)
sama-sama Pak Joko, saya dengar Pak Joko punya software house yah? Selamat yah Pak Joko Rivai smoga usahanya makin sukses
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
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
kalau untuk unidbgrid bawaan unigui kok tidak bisa ya......
kalu chcekbox ad 9, gimana solusinya. thks
kalo nambah tombol select all gmana yah.. jadi kalo maw milih semua tinggal klik tombolnya dan semua tercek mohon pencerahan
Biasanya main di variabel atau dbgrid.selected.index
akang mau tanya maksudnya "ftboolean" apa ya punya saya errornya disitu "ftboolean"
Mau tanya kalau updown bisa dipakai di DBgrid gak bang
Posting Komentar