cxGrid Chekbox kullanmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
a_self_lion
Üye
Mesajlar: 93
Kayıt: 01 Eki 2008 07:04

cxGrid Chekbox kullanmak

Mesaj gönderen a_self_lion »

Selam Arkadaşlar;
cxGrid im var bir tane ve adoquery ile seçilmiş olan carinin bilgilerinden ODM = BOR olan kayıtlarını getiriyorum.
Gelen alanlar
KNO TARİH CARİKODU MALZEME KODU TUTUAR ODM SEÇİM
1 30.10.2009 1001 8001 50 BOR CHEKBOX
2 30.10.2009 1001 8001 50 BOR CHEKBOX
3 31.10.2009 1001 8001 50 BOR CHEKBOX

Burda yapmak istediğim
1- cxGrid e bir tane columb eklemek ve properties i chekbox olacak şekilde ayarlamak bunu yaptım ama bu chekbox u nasıl aktif edilir seçilir çoklu seçim yapamadım.

2- Koymuş olduğum bir adet button ile chekbox seçili olanların ODM alanlarını tablodan ODENDI olarak işaretlenecek bir döngü

Malesef bunu yapamadım o kadar araştırdım buldum birkaç örnek ama başaramadım bana yardımcı olursanız sevinirim.
Teşekkürler.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: cxGrid Chekbox kullanmak

Mesaj gönderen mkysoft »

veri tabanında verileri çekerken bir alan daha dahil edin, özellikleri false olarak gelsin. bu sütunun tipici cxgrid'de checkbox olarak gösterin. kullanıcı gerekli işaretlemeleri böylece yapabilecektir. İşaretleme yapabilmesi için tabloyu readyonly açmamalısınız. Post olayını engelleyerek kayıtları değiştirmeye karşıda korursunuz.
Bundan sonra yapılacak işlem işraretli kayıtları seçmek olacaktır. Bunun için şöyle bir kod kullanın:

Kod: Tümünü seç

    'view,  ekranda_kayitlari_gosteren_cxgrid_view
    for i:=0 to gr_view.ViewData.RecordCount-1 do
    begin
      if view.ViewData.Rows[i].DisplayTexts[view.GetColumnByFieldName('checkbox_alan').Index]='True' then
      begin
       //istediğin şeyler
      end;
    end;
='True' kısmında çok emin değilim, çünkü ben text bir değer arıyordum, sen buraya break point koyarak neyle kontrol etmen gerektiğini anlayabilirsin.
a_self_lion
Üye
Mesajlar: 93
Kayıt: 01 Eki 2008 07:04

Re: cxGrid Chekbox kullanmak

Mesaj gönderen a_self_lion »

mkysoft yazdı:veri tabanında verileri çekerken bir alan daha dahil edin, özellikleri false olarak gelsin. bu sütunun tipici cxgrid'de checkbox olarak gösterin. kullanıcı gerekli işaretlemeleri böylece yapabilecektir. İşaretleme yapabilmesi için tabloyu readyonly açmamalısınız. Post olayını engelleyerek kayıtları değiştirmeye karşıda korursunuz.
Bundan sonra yapılacak işlem işraretli kayıtları seçmek olacaktır. Bunun için şöyle bir kod kullanın:

Kod: Tümünü seç

    'view,  ekranda_kayitlari_gosteren_cxgrid_view
    for i:=0 to gr_view.ViewData.RecordCount-1 do
    begin
      if view.ViewData.Rows[i].DisplayTexts[view.GetColumnByFieldName('checkbox_alan').Index]='True' then
      begin
       //istediğin şeyler
      end;
    end;
='True' kısmında çok emin değilim, çünkü ben text bir değer arıyordum, sen buraya break point koyarak neyle kontrol etmen gerektiğini anlayabilirsin.
Sayın mkysoft İlginiz için çok teşekkür ederim.

1- Verileri çekerken bir alan daha dahil edin demişsiniz burda veri tabanıma bir alan mı ekelyeyim chek diye yoksa her hangi bir alan mı çekeceğim
2- Break point koyarak neeyle kontrol etmen gerektiğini anlayabilirsin demissiniz bunu nasıl yaparım kusura bakmayın biraz yeniyim öğrenmeye ve anlamaya çalışıyorum aynı zamanda .
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: cxGrid Chekbox kullanmak

Mesaj gönderen mkysoft »

tabiki veri tabanına bir alan eklemeyeceksiniz. sql yazarken ayarlayacaksınız bunu, yada calculated field olarak tanımlayacaksınız. sql ile şöyle yapılabilir:

Kod: Tümünü seç

select a,b,c, 0 as checkbox from tablom
break point koyamayı bilmiyorsanız messagebox koyun. bu konudaki açığınızı bir an önce kapayın çünkü çok temel. herhangi bir delphi kitabına yada pdf'ine hızlıca göz atın.

Kod: Tümünü seç

messagebox (view.ViewData.Rows[i].DisplayTexts[view.GetColumnByFieldName('checkbox_alan').Index])
a_self_lion
Üye
Mesajlar: 93
Kayıt: 01 Eki 2008 07:04

Re: cxGrid Chekbox kullanmak

Mesaj gönderen a_self_lion »

ADOQUERY ile SELECT DEN_RECNO, DEN_TARIH, DEN_MLZADI, 0 as checkbox FROM DEN
bu şekilde cağırdım DtaBinding FieldName lerini ayarlardım 1 nci recno ikicni tarih 3ncü mlz adı 4 ncü bu alanı ekledim
Chekboxlar geldi sönük vaziyette ben onları programı çalıştıırnca seçemiyorumç.
Bunları çoklu seçilir hale nasıl getirebilirim. Yani birden fazla kayıtta seçme imkanım nasıl olur. Teşekkürler.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: cxGrid Chekbox kullanmak

Mesaj gönderen mkysoft »

tabloyu readonly açıyorsunuzdur yada cxgridi. cxgrid default salt okunur gelir.
a_self_lion
Üye
Mesajlar: 93
Kayıt: 01 Eki 2008 07:04

Re: cxGrid Chekbox kullanmak

Mesaj gönderen a_self_lion »

Sayın mksoft çok teşekkür ederim yardılarınız için.

Kod: Tümünü seç

.....
AssignFile(TF, 'c:\Posaktar.TXT');
  Rewrite(TF);
  for i := 0 to cxGrid1DBBandedTableView1.DataController.RecordCount - 1 do

     begin
          if cxGrid1DBBandedTableView1.DataController.GetValue(i, 0) = True then
           begin
.....
burda cxgrid deki satırları kontrol ederek chekbox olan alan true ise işlemleri yaptırıyorum.
ama bazı durumlarda chek box seçili olmayabiliryor bunu nasıl anlarız burda seçili değilse hiç bir satırda bu kodlarım hiç çalışmasın yani posaktar.txt dosyamı açmasın işlemi direk bitirsin.
Teşekkürler

seçili değilse nul veya false değerini alıyor ama cxgrid de bir çok satırım var bunlardan biri veya bir kaçı seçiliyor olabiliyor biz buna göre true ise gerekii işlemleri o satır için yaptırıyoruz sırası ile.

AssignFile(TF, 'c:\Posaktar.TXT');
Rewrite(TF);
burda önce bu dosyayı açıçıyorum ve cx grid de satırlar seçili ise onların alanlarından bir kaçını bu dosyaya alt alta yazmam gerekiyor orası tamam.
İşte burda
AssignFile(TF, 'c:\Posaktar.TXT');
Rewrite(TF); bundan önce bir kontrol yapmalıyım ve eğer cxgrid de hiç bir satır seçili değilse bu kodlarımı hiç çalıştırmasın dosyayı açmasın prosedürü bitirsin şeklinde bir mantık kuramadım malesef. Aslında mantık belli de ben yapamadım.:(
a_self_lion
Üye
Mesajlar: 93
Kayıt: 01 Eki 2008 07:04

Re: cxGrid Chekbox kullanmak

Mesaj gönderen a_self_lion »

Şöyle bir mantık kurdum

Kod: Tümünü seç

begin
  for i := 0 to cxGrid1DBBandedTableView1.DataController.RecordCount - 1 do
    begin
    if cxGrid1DBBandedTableView1.DataController.GetValue(i, 0) = True then
     begin
     chekbox := 1;
     end;
  end;

  if chekbox = 1 then
   begin
Burda gördüğünüz gibi eğer bir tane bile seçili ise chekbox 1 değerini alacak ve eğer chek box değeri 1 ise aşağıdakiler işlet şayet değilse bitir. sanırım bu işim çözdü ama benim burda cxgrid de böyle bir özellik varsa daha az kod yazarak yardımlarınızı beklerim. Teşekkürler.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: cxGrid Chekbox kullanmak

Mesaj gönderen mkysoft »

böyle bir özellik olması pek mümkün görünmüyor ancak şunu yapabilirsiniz. bu checkbox alanlı yerin altına runtimeda bir footer eklersiniz ve true sayısını saydırırsınız. bu rakama göre hareket etmiş olursunuz. hız açısından sizin kodlar bir farkı olmaz. hatta sizinkine ufak bir ekleme yaparak daha hızlı çalışmasını sağlayabilirsiniz. ilk döngüde tüm kayıtları taramısına gerek yok. ilk checkboxu true bulduğunda döngüyü break komutu ile durdurun. yada döngüyü do while ile kurun.
Cevapla