DBGrid de Satır ve Sütun Renklendirme

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

DBGrid de Satır ve Sütun Renklendirme

Mesaj gönderen aslangeri »

s.a. arkadaşlar.
Öyle yada böyle veritabanı ile uğraşanların dbgridde gösterdiği kayıtları renklendirme ihtiyacı olmuştur.
Genelde satır bazlı renklendirme ile problemlerimizi çözsede arada sütunlarında renklendirilmesini isteyen kullanıcılar olabiliyor. Genelde tüm satırın belli bir değere göre renklendirme üzerine kodlar var. Ancak alanın değerine göre sadece bir hücreyi renklendirmek istiyyorsak ne yapacağız. Bu makalede bu sorunun üzerine gideceğiz.
Renklendirme için gdbrid in "OndrawColumnCell" eventini kullanıyoruz.

Kod: Tümünü seç

  if gdselected in state then
  Begin
    dbgItems.canvas.brush.Color:=vlAnaEkranCurrColor;
    dbgItems.canvas.Font.Assign(vlAnaEkranCurrFont);
  end else
  begin
     if dbgitems.datasource.dataset.fieldbyname('renkalani').asinteger=1 then
     Begin
        dbgItems.canvas.Brush.Color:=vlAnaEkranListeColor;
        dbgItems.canvas.Font.Assign(vlAnaEkranListeFont);
    End else
    Begin
        dbgItems.canvas.Brush.Color:=vlAnaEkranListeColor2;
        dbgItems.canvas.Font.Assign(vlAnaEkranListeFont2);
    End
  end;
  dbgItems.DefaultDrawColumnCell(rect,datacol,column,state);
NOT: vlAnaEkranCurrColor ve vlAnaEkranListeColor TColor tipinde global değişkenlerdir.
vlAnaEkranCurrFont ve vlAnaEkranListeFont ise TFont tipinde global değişkenlerdir.

yukardaki kod ile dbgridde satırların rengini istediğim şekilde değiştirebiliyorum.
peki bu kodlarda belirli bir sütunun renginide belirli bir özelliğe göre değiştirmek istersem?
Dikkat etmemiz gerek nokta bu event ne zaman ve ne için tetikleniyor. hücrenin içindeki veri değiştiği veya hücre yeniden çizieceği zaman bu olay gerçekleşiyor. Event hücre için gerçekleştiğine göre eventin parametrelerinde hangi hücrenin çizileceği ile ilgili bir bilginin olması lazım. Eventin parametrelerini kontrol ettiğmizde
procedure TfFatura.dbgItemsDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState)
görüyoruz.
Sender = Dbgrid,
Rect = Hücrenin koordinatları,
DataCol = dbgriddeki colonun indexi
Column = Sütun bilgileri
State = Hücrenin durumu hakkında bilgi verir. Hücrenin seçili olup olmadığını bu parametre ile anlarız.
Burda Column parametresinin Field özelliğini kullanarak hücreye yazılacak olan değere göre kodumuzu düzeltebiliriz. Kodumuza bir karşılaştırma daha ekliyoruz

Kod: Tümünü seç

  if gdselected in state then
  Begin
    dbgItems.canvas.brush.Color:=vlAnaEkranCurrColor;
    dbgItems.canvas.Font.Assign(vlAnaEkranCurrFont);
  end else
  begin
     if dbgitems.datasource.dataset.fieldbyname('renkalani').asinteger=1 then
     Begin
        dbgItems.canvas.Brush.Color:=vlAnaEkranListeColor;
        dbgItems.canvas.Font.Assign(vlAnaEkranListeFont);
    End else
    Begin
        dbgItems.canvas.Brush.Color:=vlAnaEkranListeColor2;
        dbgItems.canvas.Font.Assign(vlAnaEkranListeFont2);
    End;
    if column.field.fieldname='miktar' then
    Begin  //atıyorum stok listesinde miktarı azalan ları kırmızı gösterelim
        if column.field.asinteger<=1 then
        Begin
          dbgItems.canvas.Brush.Color:=clred;
          //eğer miktar alanını gösteriyorsak ve miktar 1 den küçük yada eşitse hücrenin rengini kırmızı yap dedik.
          //eğer miktar 1 den büyükse diğer hücreler ile aynı renkte yazacak.
        End;
    End;
  end;
  dbgItems.DefaultDrawColumnCell(rect,datacol,column,state);
Kolay gelsin arkadaşlar.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: DBGrid de Satır ve Sütun Renklendirme

Mesaj gönderen conari »

@aslangeri, iki ay önce nerde idin bunu sorup bulamamıştım. :roll:

viewtopic.php?f=2&t=24618&p=139426#p139426
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla