DBGrid Sutun işlemleri

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

DBGrid Sutun işlemleri

Mesaj gönderen husonet »

Arkadaşlar projemde DBGrid nesnesinde bir problem yaşıyorum DBGrid nesnemde 5 aded sutunum var bu sutunların iki tanesini borc alacak sutunları oluşturuyor amacım borc sutununa rakam girdiğim zaman alacak sutununu kontrol etmesi ve kontrol sonucunda alacak sutunu rakam teşkil ediyorsa alacak sutununu silmesi ayrıca alacak sutununa rakam girdiğim de borc sutunu nu kontrol etmesi ve borc sutunu rakam teşkil ediyorsa borc sutununu silmesi ben bu işlemin kodunu yazdım fakat eksik çalışıyor sıyırmak üzereyim problem nerede bir türlü çözemiyorum kodu veriyorum birde siz inceler fikir verirseniz beni bahtiyar kılarsınız.

Kod: Tümünü seç

procedure TCariAcilisFrm.DBGrid1ColEnter(Sender: TObject);
Begin
     
    //Borç Alacak Kontrolü
    if DBGrid1.SelectedIndex = 3 Then
    Begin
        if DBGrid1.Columns[3].Field.AsFloat > 0 Then
            Begin
                AdoDataSet1.Edit;
                IF (AdoDataSet1.State = dsEdit) or (AdoDataSet1.State = dsInsert) then
                   DBGrid1.Columns[4].Field.AsFloat := 0;
                AdoDataset1.Post;
            End
    Else
    if DBGrid1.SelectedIndex = 4 Then
    if DBGrid1.Columns[4].Field.AsFloat > 0 Then
    Begin
        AdoDataSet1.Edit;
        IF (AdoDataSet1.State = dsEdit) or (AdoDataSet1.State = dsInsert) then
            DBGrid1.Columns[3].Field.AsFloat := 0;
            AdoDataset1.Post;
        End;
    End;
End;

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Öncelikle DBGrid ler üzerinde "Columns[3]." gibi erişimler kullanmamaya çalışın. Bunun nedeni ileride bir kolon ekleme yada silmeden sonra colon sıraları değişebilir. 3 party bileşenlerde kullanıcı kolon sıralamasını değiştirebilir. bu yüzden daha esnek mantıklar kullanın.
Sorunun cevabıysa neden grid üzerinden gidiyorsun? TField lar da yap bu işlemi, ben öyle yapıyorum.Alacak Ve Borc field larının onChange eventlarında diğerini değerini direk sıfırla. Burda çok önemli olan noktaysa şu:
Eğer alacak alanındaysan Borc Field ını sıfırladın. Sakın unutmayın. Borc Field ınında event i tetiklenecek ve kısır döngüye girecektir. Bunuda önlemek için, Aktif olan field ı kontrol edin bunu Grid in aktif kolonunun Field adından yapabilirsiniz.
Kontrol aşağı yukarı şöyle olabilir.

Kod: Tümünü seç

OnAlacakChange event inde
 if GridColumnField =Alacak then BorcField = 0;
bu her alacak Field değiştiğinde borc field ına sıfır atar

Kod: Tümünü seç

OnAlacakChange event inde
 if (GridColumnField =Alacak)and
  ( 
       ( not (BorcField.Isnull)  ) and (BorcField.AsFloat <> 0)
   ) then BorcField = 0;
Bu kod ise Aktif olan kolonun alacak kolonu olup olmadığını kotrol eder ve borc alanının null değilse ve sıfırdan farklı olduğu durumlarda çalışır

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Hocam önerileriniz için teşekkür ederim bu şekilde kullanma isteiğimin sebebi ise veritabanına bulaşırsam programımın performansının düşeceğini düşünüyorum acaba yanlışmı düşünüyorum.

Teşekkür Ederim.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Olayı tablo üzerinden yapman daha doğru olur. Her hangi bir perfomans kaybı olması da mantiken doğru değil. Tabloda borc ve alacak diye iki alan varsa Freeman35 in dediği gibi Tablonun field propertisinden OnValidate de de yapabilirsin;
Borc alanının Onvalidate inde;

Kod: Tümünü seç

if Table1Borc.Value <> 0 then
  Table1Alacak.Value := 0;
Alacak alanının Onvalidate inde;

Kod: Tümünü seç

if Table1Alacak.Value <> 0 then
  Table1Borc.Value := 0;
kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Şüpelerime yanıt bulmama yardımcı olduğunuz için teşekkür ederim.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla