DBGrid1DrawColumnCell

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

DBGrid1DrawColumnCell

Mesaj gönderen abdulkadir »

s.a
tabloda TEKLIF_DURUMU alanına durumları 1, 2, 3, vs diye kaydediyoruz
1 teklifte
2 onaylandı
3 iptal anlamına geliyor

simdi sorun dbgride cekerken
teklif durumu
1 ise teklifte yazsın istiyorum
2 ise onaylandı
3 ise iptal yazsın istiyorum

duruma göre renklendirdim ama durumu yazdıramadım.

Kod: Tümünü seç

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;  const Rect: TRect;  DataCol: Integer; Column: TColumn;  State: TGridDrawState);
  var R: TRect;
begin
   R := Rect;
  if not (gdSelected in State) then
Case IBQueryTeklif.FieldByName('TEKLIF_DURUMU').AsInteger of
1: begin
 Canvas.Brush.Color :=$00FCFCFC;
    // Column.Grid.Fields[DataCol].AsString:= 'Teklifte';
 end;
2: begin
 Canvas.Brush.Color :=$00B6F999;
    // Column.Grid.Fields[DataCol].AsString:= 'onaylandı';
end;
3:  begin
Canvas.Brush.Color :=$00F1CCB4;
    // Column.Grid.Fields[DataCol].AsString:= 'iptal';
     end;
  end;
end;
hatalı satırların önüne // isaretlerini koydum bu satırlarda ne olmalı.
saglıcakla kalın.
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: DBGrid1DrawColumnCell

Mesaj gönderen Battosai »

Kod: Tümünü seç

var
s:string;
Begin
........
With (Sender as TDBGrid).Canvas do
Begin
Case IBQueryTeklif.FieldByName('TEKLIF_DURUMU').AsInteger of
Begin
1:Begin S:='Teklifte'; Brush.Color :=$00FCFCFC; End;
2:Begin S='Onaylandı';Brush.Color :=$00B6F999; End;
end;
if datacol=2 then ///Burası hangi kolonda gösterilecekse onun index i olacak....
Begin
FillRect(Rect);
textout(Rect.left+2,Rect.top+2,S);
end;
End;
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DBGrid1DrawColumnCell

Mesaj gönderen abdulkadir »

tesekkür ederim

işime yaradı benim için sorun olmasada

satır secildiginde teklifte yazısı yine 1 oluyor multiselect tru yapıp denedim yine aynı
bana bu sekilde de yeter

iyi calısmalar...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: DBGrid1DrawColumnCell

Mesaj gönderen Battosai »

Kod: Tümünü seç

if datacol=2 then ///Burası hangi kolonda gösterilecekse onun index i olacak....
Begin
FillRect(Rect);
textout(Rect.left+2,Rect.top+2,S);
if gdSelected in State then 
Begin
FillRect(Rect);
textout(Rect.left+2,Rect.top+2,S);
end
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: DBGrid1DrawColumnCell

Mesaj gönderen unicorn64 »

neden sorgularken uygun şekilde sql den getirmiyorsunuz bu değerleri..?

Kod: Tümünü seç

select (case TEKLIF_DURUMU when 1 then 'teklifte' when 2 then 'onaylandı' when 3 then 'iptal' else 'belirsiz' end) durum
from teklif
gibi...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DBGrid1DrawColumnCell

Mesaj gönderen abdulkadir »

s.a

Bu Sekilde sadece durum bilgisini alıyoruz.
Sadece durum lara ihtiyac olsa haklısın ama bu sorgu icerisinde nasıl kullanabiliriz.
biraz denedim ama calıstıramadım geç oldu yarın tekrar bakarım

Kod: Tümünü seç

T:=DBLABELBLCRKODU.Field.Text;
    if CheckBoxSilinen.Checked = True then
          QERY :=''
             else
           QERY :=' AND  SILINDI=0';

      IBQueryTeklif.SQL.Add('SELECT * FROM TEKLIF WHERE BLCRKODU = ' +  T +  QERY );

tesekkürler...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DBGrid1DrawColumnCell

Mesaj gönderen abdulkadir »

yatmadan aradım biraz birseyler buldum calıstı ama

20 rows fetched (468 ms)
//test ettim sorguyu ortalama cevap süresi cok fazla geldi bana 20 sonuç için

Kod: Tümünü seç

Select 	T.*, 
 (CASE TEKLIF_DURUMU 
 when 1 then 'Teklifte' 
 when 2 then 'Onaylandı' 
 when 3 then 'Sipariste'
 when 4 then 'Muhasebelendi'
 when 5 then 'Arsivde'
 when 5 then 'iptal' 
 else 'Belirsiz' 
 end)DURUM
From TEKLIF T
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: DBGrid1DrawColumnCell

Mesaj gönderen conari »

Kod: Tümünü seç

when 5 then 'Arsivde'
when 5 then 'iptal' 
else 'Belirsiz' 
end)DURUM
5 LER mükerrer birde
AS DURUM olarak kullanın.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: DBGrid1DrawColumnCell

Mesaj gönderen aslangeri »

s.a.
ben olsam dbgride yazdırmak için datasetdeki (query/table) alanların on gettext eventini kullanırdım.

Kod: Tümünü seç

if sender.value<>null then
case sender.value of
0:text:='vafdsf';
1:text:='dafdasf';
end;
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: DBGrid1DrawColumnCell

Mesaj gönderen Battosai »

Görüldüğü gibi yöntem çok işine hangisi geliyorsa tercih edeceksin... case yönteminin hız konusunda yavaşlama yapacağı aşikar bunun yerine aslangerinin örneği uygulanabilir....Alında duruma göre iki yöntemden birini şeçmelisin canvas ile yazdırırsan datasetteki değeri değişmez dbgrid export ederken gerçek değeri neyse o çıkar, ongettext ile yaparsan datasetteki değer değişir...bu ikisi arasında en hızlı yöntem hangisidir test etmek lazım....
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: DBGrid1DrawColumnCell

Mesaj gönderen conari »

Tanımlamaları vt de bir tableda yapıp, Lookup field olarak da ekleyip gösterebilirsiniz.
Bu da işinizi görür.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DBGrid1DrawColumnCell

Mesaj gönderen abdulkadir »

İlginize tesekkür ederim.
aslangeri
arkadasın gösterdigi yöntemide denedim hız konusunu test edemedim ama en iyisi diyebilirim
görsel olarak ancak izleyebiliyorum
ve bu sekilde kullanmaya karar verdim bir sorun yasarsam burdan devam ederim.

Hepinize tesekkür ederim arkadaslar...
hayırlı calısmalar.
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Cevapla