CheckListBox i veritabaninda kullanma Gönderen: dynamo Tarih: 07 April 2007 13:34:55
öncelikle veritabanında Boolean bir alan olmalı.Bu boolean alanın true/false durumuna göre veriler CheckListBox' a seçili olarak/olmayarak gelir.Tablo'da "durum" adlı Boolean bir alanımız olsun.sql serverde Boolean alan için "Bit" seçilir.dbCheckListBox komponentimiz olmadığı için CheckListBox'ta seçilen/kaldırılan değeri bu Boolean alan ile kotrol ediyoruz.
verileri alma:
procedure TfrmAnaMenu.Button1Click(Sender: TObject);
var
i:integer;
begin
CheckListBox1.Clear;
ADOQuery1.First;
for i:=0 to ADOQuery1.RecordCount-1 do begin
CheckListBox1.Items.Add(ADOQuery1.FieldByName('ad').AsString);
if ADOQuery1.FieldByName('durum').AsBoolean=true then
CheckListBox1.Checked[i]:=true
else
CheckListBox1.Checked[i]:=false;
ADOQuery1.Next;
end;
end;

kaydetme:
CheckListBox'ta değerleri seçme/seçmeme durumuna göre tabloya kaydetme için CheckListBox1'in OnClick olayını kullanalım:
procedure TfrmAnaMenu.CheckListBox1Click(Sender: TObject);
begin
ADOQuery1.Locate('kod',IntToStr(CheckListBox1.ItemIndex+1),[]);
if CheckListBox1.Checked[CheckListBox1.ItemIndex] then begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('durum').AsBoolean:=true;
ADOQuery1.Post;
end
else begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('durum').AsBoolean:=false;
ADOQuery1.Post;
end;
end;

ADOQuery1 check edilen/kaldırılan değere Locate olması için kod alanı sıralı olmalı."CheckListBox1.ItemIndex+1" -->CheckListBox1'ın itemindex'ini "kod"un değerine eşitledik."+1" ise,indexler daima 0'dan başladığından ekledik.aksi halde check edilen/kaldırılan değerin hangi koda ait olduğunu bulamazdık. yada "kod"ların tablodaki sırası bir diziye atanarak "CheckListBox1.ItemIndex+1" bu dizinin indexine eşitlenerek ilgili koda Locate yapılabilir.