Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Dbgrid Şartlı Renklendirme
#1
Exclamation 
Sevgili Delphi Dostlarım;
Dbgrid renklendirme ile ilgili bir sorunum var.Bilen arkadaşlarımdan bilgi istemekteyim.
2 tane query var programımda birisi emirler biri durumlar

Emirler tablosunda
durum alanı integer

Durumlar tablosunda
id alanı integer (auto)
renk varchar

Şimdi sorum şu arkadaşlarım emirler tablosunu dbgride aktardım.Emirler tablosundaki durum = 17 olan alanı durumlar tablosundan id alanından bulup renk(varchar) rengi çağırması gerekiyor.

emirler tablosu durum = 17 ise durumlar tablosundaki id = 17 deki rengi vermesi gerekiyor satıra ama bir türlü verdiremedim.Bir tane alanı renklendiriyor.Dbgridin Drawcell ine yazıyorum kodları.Teşekkürler...
Cevapla
#2
Merhaba öncelikle event'lardan, DBGrid1DrawColumnCell olayına kontrol kodu yazmanız gerekiyor. Benim yaptığım şu şekilde..

if DbGrid1.DataSource.DataSet.FieldByName('Durumu').Value = 'HAZIR' then
begin
DbGrid1.Canvas.Font.Color := clBlack;
DbGrid1.Canvas.Brush.Color := clLime;
DbGrid1.Canvas.FillRect(Rect);
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Cevapla
#3
(19-10-2022, Saat: 09:45)erdemtaner Adlı Kullanıcıdan Alıntı: Sevgili Delphi Dostlarım;
Dbgrid renklendirme ile ilgili bir sorunum var.Bilen arkadaşlarımdan bilgi istemekteyim.
2 tane query var programımda birisi emirler biri durumlar

Emirler tablosunda
durum alanı integer

Durumlar tablosunda
id alanı integer (auto)
renk varchar

Şimdi sorum şu arkadaşlarım emirler tablosunu dbgride aktardım.Emirler tablosundaki durum = 17 olan alanı durumlar tablosundan id alanından bulup renk(varchar) rengi çağırması gerekiyor.

emirler tablosu durum = 17 ise durumlar tablosundaki id = 17 deki rengi vermesi gerekiyor satıra ama bir türlü verdiremedim.Bir tane alanı renklendiriyor.Dbgridin Drawcell ine yazıyorum kodları.Teşekkürler...

İyi günler  yanlış anlamadı isen iki ayrı tablonuz ve  bir dbgrid var 
dbgrid ondrawcell olayına  kodu yazdınız sadece tek satır renkleniyor
emirler tablosundaki durumu sadece bir kez alıyor kontrol ediyor ve sadece bir satır etkileniyor.

dbgridi dolduran sql sorgusuna  left join ile emirler tablosundaki durum alanını ekleyin 
sonra sizin yaptığınız gibi ondrawcell olayında  left join ile eklediğimiz durumu kontrol edersiniz satırı renklendirirsiniz.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#4
(19-10-2022, Saat: 10:46)cinarbil Adlı Kullanıcıdan Alıntı:
(19-10-2022, Saat: 09:45)erdemtaner Adlı Kullanıcıdan Alıntı: Sevgili Delphi Dostlarım;
Dbgrid renklendirme ile ilgili bir sorunum var.Bilen arkadaşlarımdan bilgi istemekteyim.
2 tane query var programımda birisi emirler biri durumlar

Emirler tablosunda
durum alanı integer

Durumlar tablosunda
id alanı integer (auto)
renk varchar

Şimdi sorum şu arkadaşlarım emirler tablosunu dbgride aktardım.Emirler tablosundaki durum = 17 olan alanı durumlar tablosundan id alanından bulup renk(varchar) rengi çağırması gerekiyor.

emirler tablosu durum = 17 ise durumlar tablosundaki id = 17 deki rengi vermesi gerekiyor satıra ama bir türlü verdiremedim.Bir tane alanı renklendiriyor.Dbgridin Drawcell ine yazıyorum kodları.Teşekkürler...

İyi günler  yanlış anlamadı isen iki ayrı tablonuz ve  bir dbgrid var 
dbgrid ondrawcell olayına  kodu yazdınız sadece tek satır renkleniyor
emirler tablosundaki durumu sadece bir kez alıyor kontrol ediyor ve sadece bir satır etkileniyor.

dbgridi dolduran sql sorgusuna  left join ile emirler tablosundaki durum alanını ekleyin 
sonra sizin yaptığınız gibi ondrawcell olayında  left join ile eklediğimiz durumu kontrol edersiniz satırı renklendirirsiniz.

İlginiz için diğer arkadaşla birlikte size de teşekkür ederim.

procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = renk_datasource.DataSet.FieldByName('id').Value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(renk_datasource.DataSet.FieldByName('renk').AsString);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Yukarıdaki kodu gridin drawcolumcell ine yazdım.

SELECT *
FROM emirler
LEFT JOIN durumlar
ON emirler.durum=durumlar.id


Buda emirler query.Ama hala tek satır renklendiriyor.Teşekkürler...

(19-10-2022, Saat: 11:29)erdemtaner Adlı Kullanıcıdan Alıntı:
(19-10-2022, Saat: 10:46)cinarbil Adlı Kullanıcıdan Alıntı: İyi günler  yanlış anlamadı isen iki ayrı tablonuz ve  bir dbgrid var 
dbgrid ondrawcell olayına  kodu yazdınız sadece tek satır renkleniyor
emirler tablosundaki durumu sadece bir kez alıyor kontrol ediyor ve sadece bir satır etkileniyor.

dbgridi dolduran sql sorgusuna  left join ile emirler tablosundaki durum alanını ekleyin 
sonra sizin yaptığınız gibi ondrawcell olayında  left join ile eklediğimiz durumu kontrol edersiniz satırı renklendirirsiniz.

İlginiz için diğer arkadaşla birlikte size de teşekkür ederim.

procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = renk_datasource.DataSet.FieldByName('id').Value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(renk_datasource.DataSet.FieldByName('renk').AsString);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Yukarıdaki kodu gridin drawcolumcell ine yazdım.

SELECT *
FROM emirler
LEFT JOIN durumlar
ON emirler.durum=durumlar.id


Buda emirler query.Ama hala tek satır renklendiriyor.Teşekkürler...

Sevgili kardeşim şimdi yapabildim teşekkür ederim tarif ettiğin şekli ile oldu

Bu Kod :
procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = Dbgrid1.DataSource.dataset.fieldbyname('id_1').value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(Dbgrid1.DataSource.dataset.fieldbyname('renk').value);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Cevapla
#5
(19-10-2022, Saat: 11:29)erdemtaner Adlı Kullanıcıdan Alıntı:
(19-10-2022, Saat: 10:46)cinarbil Adlı Kullanıcıdan Alıntı: İyi günler  yanlış anlamadı isen iki ayrı tablonuz ve  bir dbgrid var 
dbgrid ondrawcell olayına  kodu yazdınız sadece tek satır renkleniyor
emirler tablosundaki durumu sadece bir kez alıyor kontrol ediyor ve sadece bir satır etkileniyor.

dbgridi dolduran sql sorgusuna  left join ile emirler tablosundaki durum alanını ekleyin 
sonra sizin yaptığınız gibi ondrawcell olayında  left join ile eklediğimiz durumu kontrol edersiniz satırı renklendirirsiniz.

İlginiz için diğer arkadaşla birlikte size de teşekkür ederim.

procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = renk_datasource.DataSet.FieldByName('id').Value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(renk_datasource.DataSet.FieldByName('renk').AsString);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Yukarıdaki kodu gridin drawcolumcell ine yazdım.

SELECT *
FROM emirler
LEFT JOIN durumlar
ON emirler.durum=durumlar.id


Buda emirler query.Ama hala tek satır renklendiriyor.Teşekkürler...

(19-10-2022, Saat: 11:29)erdemtaner Adlı Kullanıcıdan Alıntı: İlginiz için diğer arkadaşla birlikte size de teşekkür ederim.

procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = renk_datasource.DataSet.FieldByName('id').Value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(renk_datasource.DataSet.FieldByName('renk').AsString);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Yukarıdaki kodu gridin drawcolumcell ine yazdım.

SELECT *
FROM emirler
LEFT JOIN durumlar
ON emirler.durum=durumlar.id


Buda emirler query.Ama hala tek satır renklendiriyor.Teşekkürler...

Sevgili kardeşim şimdi yapabildim teşekkür ederim tarif ettiğin şekli ile oldu

Bu Kod :
procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = Dbgrid1.DataSource.dataset.fieldbyname('id_1').value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(Dbgrid1.DataSource.dataset.fieldbyname('renk').value);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
çalıştığına sevindim  bir önerim var kodlar için mesajı yazdığın ekran üste delhi ikonuna tıkla kodu yaz veya yapıştır ekle de aşağıdaki gibi görünecek
okunurluk artacaktır.
procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = Dbgrid1.DataSource.dataset.fieldbyname('id_1').value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(Dbgrid1.DataSource.dataset.fieldbyname('renk').value);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#6
(19-10-2022, Saat: 11:41)cinarbil Adlı Kullanıcıdan Alıntı:
(19-10-2022, Saat: 11:29)erdemtaner Adlı Kullanıcıdan Alıntı: İlginiz için diğer arkadaşla birlikte size de teşekkür ederim.

procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = renk_datasource.DataSet.FieldByName('id').Value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(renk_datasource.DataSet.FieldByName('renk').AsString);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Yukarıdaki kodu gridin drawcolumcell ine yazdım.

SELECT *
FROM emirler
LEFT JOIN durumlar
ON emirler.durum=durumlar.id


Buda emirler query.Ama hala tek satır renklendiriyor.Teşekkürler...


Sevgili kardeşim şimdi yapabildim teşekkür ederim tarif ettiğin şekli ile oldu

Bu Kod :
procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = Dbgrid1.DataSource.dataset.fieldbyname('id_1').value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(Dbgrid1.DataSource.dataset.fieldbyname('renk').value);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
çalıştığına sevindim  bir önerim var kodlar için mesajı yazdığın ekran üste delhi ikonuna tıkla kodu yaz veya yapıştır ekle de aşağıdaki gibi görünecek
okunurluk artacaktır.
procedure Tis_emirler.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.dataset.fieldbyname('durum').value = Dbgrid1.DataSource.dataset.fieldbyname('id_1').value then
begin
Dbgrid1.Canvas.Brush.Color :=stringtocolor(Dbgrid1.DataSource.dataset.fieldbyname('renk').value);
end;
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Bir sonraki konuda dikkat edeyim inşAllah buna teşekkür ederim ilginiz için.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  DBGrid Columns Otomatik Boyutlandırma Halil Han BADEM 8 8.169 23-01-2025, Saat: 14:51
Son Yorum: OZCANK
  dbgrid sutun toplamini alip lazreport da gostermek sadikacar60 6 1.071 02-12-2024, Saat: 12:21
Son Yorum: sadikacar60
  DBGrid Detay Gösterilmesi. OZCANK 19 12.905 05-04-2024, Saat: 00:48
Son Yorum: Pimapen_Nuri
  DbGrid'de Seçili Satırların Fast Reportta Raporlanması [ÇÖZÜLDÜ] bünyamin68 4 1.714 17-12-2023, Saat: 15:08
Son Yorum: bünyamin68
  DBGRID Otomatik Sıra No Alanı [ÇÖZÜLDÜ] bünyamin68 2 1.279 18-10-2023, Saat: 21:00
Son Yorum: bünyamin68



Konuyu Okuyanlar: