VT'de Saklanan Renk Bilgisi ve Buna Göre Renklenen DBGrid???

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

VT'de Saklanan Renk Bilgisi ve Buna Göre Renklenen DBGrid???

Mesaj gönderen R.K. »

Merhaba arkadaşlar. Sizlere 2 sorum olacak. Forumda aradım ama bulamadım yapmak istediğim şeyi.
1-) Elimde
  • RENK_ID
    RENK_ADI
    RENK_DEGER
alanlarını bulunduran bir tablom var. Ben bu tabloma bilgi eklerken ColorComboBox bileşenini kullanıyorum ve ilgili değerleri vt' ye giriyorum. Bu değerleri girdikten sonra bunları dbgrid içinde göstermek ve dbgrid içinde bir alan oluşturup o alanda da her satırın renk bilgisinde ne yazıyorsa son hücrenin o renk olmasını istiyorum. Bunun için kullanmam gereken mantık nedir ne yapmam gerekir?

2-)Elimde master detail 2 tablom var.
  • ---TBL_ISLEMANA
    ISLEM_ID
    TARIH
    SAAT
    BOLUM
DETAIL olan
  • ---TBL_DETAY
    DETAY_ID
    ISLEM_ID
    PERSONEL_ID
    ISLEM
Bu tablolar için IBDataSet nesnesi kullandım ve master detail ilişkisini datasource yardımıyla yaptım.

Kod: Tümünü seç

datasetDetail.Datasource=datasourceMaster;
Gerekli SQL kodlarını generate sql ile ürettim. Sorum şu şekilde master detail yapıda IBDataSet nesnesini kullanmam ve bu şekilde yapıyı oluşturup, önce kaydet butonuna basıp master taboyu kaydedip master tablonun IBDataSet nesnesinin AfterPost olayından sonra detail tablo için post olayını çağırmam doğru bir yaklaşım mı? Sizler master detail ilişkilerdeki ekleme, silme güncelleme işlemleri için nasıl bir yöntem kullıyorsunuz. Elimde 3 tane delphi kitabı var ama üçüde master detail ilişkiyi sadece select için örneklendirmiş ve ekleme veya silme örneği hiç vermemiş. Yardımcı olursanız sevinirim. Hepinize kolay gelsin...
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: VT'de Saklanan Renk Bilgisi ve Buna Göre Renklenen DBGrid???

Mesaj gönderen emin_as »

Detail tablon kendi post işlemini yapar, o yüzden detail tablonun postu için dogrudan endişelenmen gereksiz. Sadece şu noktalara dikkat et:
1- Detail tabloya yeni kayıt girerken, master in state i insert veya edit ise post edilmelidir. Yoksa detail girişi ile master arasındaki bağ kopar. Şöyle anlatayım yeni bir master girerken, post etmeden detail girmeye başlıyorsun. Data post edilmedigi için detail baglantıya masterdan aldıgın alan null olarak geliyor. Daha sonra detail i post edip, master i post edersen. Master son girilen değer olurken, detail null da kalıyor ve detail ile master arasındaki bag ortadan kalkıyor ve detail kayboluyor. Veritabanında var, ama islemid si null olarak duruyor. Bu durumu engellemen ise basit, detail in onbeforeinsert eventinde master i kontrol edip, eger edit veya insert ise master i post etmen yeterlidir.
2- Foreign key kullanman da faydalı olur. Master ile detail i bagladıgın alan degişirse veya silinirse veritabanı otomatik olarak gerekli düzenlemeyi yapar.

ALTER TABLE DETAIL ADD CONSTRAINT HERHANGIBIRSEY FOREIGN KEY (ISLEMID) REFERENCES MASTERTABLE(ISLEMID) ON DELETE CASCADE ON UPDATE CASCADE;

Bu şekilde ekleyecegin foreign key sayesinde master table silinirse, ona ait tüm detail kayıtlar da silinecektir. ISLEMID degisirse, detaillardaki islemid de degisecektir.

Update, insert ve delete için gerekli sqlleri ibdataset in üzerini sag ile tıklayıp, dataset editorden oluşturduysan, detail tablon tüm işlemleri sorunsuz yapacaktır.

Aşagıdaki kod griddeki renk çizimi için işini görmesi lazım. Denemedim, o yüzden ufak tefek düzenleme gerekebilir.

Kod: Tümünü seç

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); 
begin 
  with Sender as TDBGrid do 
    begin 
      if Columns[DataCol].FieldName = 'FIELDADI' then 
        begin 
          Canvas.Brush.Color:=   <--- istediğin renk
          Canvas.FillRect(Rect); 
        end 
      else 
        DefaultDrawColumnCell(Rect,DataCol,Column,State); 
    end; 
end;
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Re: VT'de Saklanan Renk Bilgisi ve Buna Göre Renklenen DBGrid???

Mesaj gönderen R.K. »

emin_as hocam çok teşekkürler cevabın için işlerden dolayı yeni uygulama fırsatım oldu örneği. Örnekteki kodlar ile vt'de renk bilgisi bulunan alanı renklendirebiliyorum. Peki vt'de olmayan dbgrid'e kendi eklediğim bir alan olsa onu renklendirmek istersem ne yapmam gerekir.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: VT'de Saklanan Renk Bilgisi ve Buna Göre Renklenen DBGrid???

Mesaj gönderen emin_as »

Renklendirme için FieldAdi ile kontrol yapılıyor, bu nedenle fieldin vt de olması veya calculated olması önemli degil. İsmine göre alanı belirleyip, renklendirmeyi yapabilirsin.
Cevapla