DBGrid de TL formatı için yardım...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kutercakal007
Üye
Mesajlar: 25
Kayıt: 04 Ara 2010 12:34

DBGrid de TL formatı için yardım...

Mesaj gönderen kutercakal007 »

Merhaba arkadaşlar kolay gelsin.
Forumda bu konuyla alakalı epey araştırdım ama bi türlü sorunumu halledemedim :(
Tablomda ki alan tipi numeric(18,2) (money ve decimal alanları da denedim) ve ben bu alanı DBGrid e yansıttıgımda sizin de tahmin ettiğiniz gibi
değerler; eğer 23,45 gibi bişey ise aynen geliyo ama 30,00 şeklinde gelmiyor. Ki zaten ben sadece bu şekilde değil 30,00 TL şeklinde gelmesini istiyorum.
Ama şöyle bir durum var, ben DBGrid de Field Editör ü kullanmıyorum yani kullanmamam gerekiyor. O yüzden DisplayFormat vs.. gibi çözümler benim için geçersiz :(
Formun Create olayında ;

Kod: Tümünü seç

with AnaForm_DBGrid do
  begin
  Columns.Add;
  Columns[0].Alignment:=taCenter;
  Columns[0].FieldName:='Tarih';
  Columns[0].Title.Caption:='TARİH';
  Columns[0].Title.Alignment:=taCenter;
  Columns[0].Width:=110;
  Columns.Add;
.
.
end;
şeklinde tek tek getirtmek durumundayım.

Bu konuda bana yardımcı olabilir misiniz içinden çıkamadım :(
Şimdiden Allah Razı Olsun Selametle..
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: DBGrid de TL formatı için yardım...

Mesaj gönderen orhancc »

field editörü neden kullanamıyorsun ?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: DBGrid de TL formatı için yardım...

Mesaj gönderen sabanakman »

Çalışma zamanında sabit olmayan, kodlarla değişen bir ekran olabilir ama delphi tasarım ekranında yaptıklarınızı, kodlarla yapabilmeniz mümkün. Bu işlemleri koda dökmeye başarmanız sorunu çözecektir. Mesela bu soru için cevap "Grid'in bağlı olduğu tablo aktif olduktan sonra ilgili alanı bulup Currency özelliğini True yapmak" olacaktır. Alan tipi TFloatField, TBCDField gibi farklı tiplerde olabilir. Siz kendi alan tipinize göre bir değişkenle bu durumu aşabilirsiniz ama bu durumlarda genelde hata vermeden çalışan bir örnek..:

Kod: Tümünü seç

uses TypInfo;

procedure TForm1.Button1Click(Sender: TObject);
var Alan:TField; //FAlan:TFloatField;
begin
  Table1.Open;
  Alan:=Table1.FieldByName('CustNo');
  //FAlan:=TFloatField(Table1.FieldByName('CustNo'));
  //FAlan.currency:=True;
  if IsPublishedProp(Alan,'currency') then //-->currency özelliği varsa
   SetPropValue(Alan,'currency',True);  //-->True yap
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
kutercakal007
Üye
Mesajlar: 25
Kayıt: 04 Ara 2010 12:34

Re: DBGrid de TL formatı için yardım...

Mesaj gönderen kutercakal007 »

Şaban hocam dedğinizi aynen uyguladım ama sonuç değişmedi. Formun create yordamına yazdıgım kodları veriyim ben en iyisi :( Bu arada daha önceki mesajımda söylemeyi unuttum ADOQuery kullanıyorum.

Uses Satırında Typeinfo ekli, Formun Create yordamı :

Kod: Tümünü seç

procedure TDryCenterAna.FormCreate(Sender: TObject);
var
  trh:String;
  FAlan:TFloatField;
begin
  DRY_DataModule.GELIR_AQ.Open;
  FAlan:=TFloatField(DRY_DataModule.GELIR_AQ.FieldByName('OdemeMiktari'));
  FAlan.currency:=True;
  if IsPublishedProp(FAlan,'Currency') then
  SetPropValue(FAlan,'Currency',True);
  BasTarih.Date:=Today;
  BitTarih.Date:=Today;
  MusteriTipi.Buttons[0].Checked:=True;
  IslemTipi.Buttons[0].Checked:=True;
  trh:=copy(DateToStr(Today),1,2)+'.'+copy(DateToStr(Today),4,2)+'.'+copy(DateToStr(Today),7,4);
  with AnaForm_DBGrid do
  begin
  Columns.Add;
  Columns[0].Alignment:=taCenter;
  Columns[0].FieldName:='Tarih';
  Columns[0].Title.Caption:='TARİH';
  Columns[0].Title.Alignment:=taCenter;
  Columns[0].Width:=110;
  Columns.Add;
  Columns[1].Alignment:=taCenter;
  Columns[1].FieldName:='SubeAdi';
  Columns[1].Title.Caption:='ŞUBE';
  Columns[1].Title.Alignment:=taCenter;
  Columns[1].Width:=130;
  Columns.Add;
  Columns[2].Alignment:=taCenter;
  Columns[2].FieldName:='KayitTipi';
  Columns[2].Title.Caption:='KAYIT TİPİ';
  Columns[2].Title.Alignment:=taCenter;
  Columns[2].Width:=110;
  Columns.Add;
  Columns[3].Alignment:=taCenter;
  Columns[3].FieldName:='MusteriAdSoyad';
  Columns[3].Title.Caption:='MÜŞTERİ';
  Columns[3].Title.Alignment:=taCenter;
  Columns[3].Width:=150;
  Columns.Add;
  Columns[4].Alignment:=taCenter;
  Columns[4].FieldName:='OdemeMiktari';
  Columns[4].Title.Caption:='TUTAR';
  Columns[4].Title.Alignment:=taCenter;
  Columns[4].Width:=150;
  end;
  with DRY_DataModule.ADOQuery1 do
  begin
  SQL.Clear;
  SQL.Add('Select GELIR.Tarih,GELIR.SubeAdi,MUSTERI.KayitTipi,MUSTERI.MusteriAdSoyad,GELIR.OdemeMiktari from GELIR,MUSTERI where MUSTERI.KayitTipi=''BIREYSEL'' and GELIR.SIRANO=MUSTERI.SIRANO');
  ExecSQL;
  EnableControls;
  Close;
  Open;
  end;
Ekran görüntüsü:
Resim

Bu arada neden Field Editor kullanamıyorum sorusuna cevap veriyim :) çünkü DBGrid e 3 farklı tablodan karışık sırada veri getirmem lazım ama DBGrid de her defasında sadece ilgili alanlar gelmek zorunda yani 3 tablonun da bağlı olduğu alanların hepsi gelmemeli. Bu sorunu formun ilgili yordamına kod yazarak çözebildim tasarım anında herhangi bir çözüm bulamadım yok gibi duruyor :(
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: DBGrid de TL formatı için yardım...

Mesaj gönderen sabanakman »

Anlaşılan, cevabı pek dikkatli okumamışsınız.
sabanakman yazdı:Çalışma zamanında sabit olmayan, kodlarla değişen bir ekran olabilir ama delphi tasarım ekranında yaptıklarınızı, kodlarla yapabilmeniz mümkün. Bu işlemleri koda dökmeye başarmanız sorunu çözecektir. Mesela bu soru için cevap "Grid'in bağlı olduğu tablo aktif olduktan sonra ilgili alanı bulup Currency özelliğini True yapmak" olacaktır. Alan tipi TFloatField, TBCDField gibi farklı tiplerde olabilir. Siz kendi alan tipinize göre bir değişkenle bu durumu aşabilirsiniz ama bu durumlarda genelde hata vermeden çalışan bir örnek..:
uses TypInfo;

procedure TForm1.Button1Click(Sender: TObject);
var Alan:TField; //FAlan:TFloatField;
begin
Table1.Open;
Alan:=Table1.FieldByName('CustNo');
//FAlan:=TFloatField(Table1.FieldByName('CustNo'));
//FAlan.currency:=True;
if IsPublishedProp(Alan,'currency') then //-->currency özelliği varsa
SetPropValue(Alan,'currency',True); //-->True yap

end;
En sonra satıra yazdığınız Open satırından sonra bu işlemi yapmalısınız. Tablo ne zaman kapatılır yeniden açılırsa yapılan ayar uçacaktır (yakalayın kaçmasın :twisted: ).
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
kutercakal007
Üye
Mesajlar: 25
Kayıt: 04 Ara 2010 12:34

Re: DBGrid de TL formatı için yardım...

Mesaj gönderen kutercakal007 »

Şaban hocam pardon dikkatimden kaçmış :( Dediğiniz gibi değiştirdim olayın en sonunda tablomu kapattıktan sonra yazdım kodları ve hatta SQL de ilgili alanın 3 farklı tipi (money, decimal(18,2), numeric(18,2)) için de deneme yaptım ama sonuç yine aynı sebebi ne olabilir diye düşünüyorum... Aklıma gelen hiç bişey yok belki de basit bişey ama göremedim.
Daha önce o alanlara form üzerindeki edit nesnelerinden değerler gönderdim hatta gönderirken de float değer olarak gönderim yaptım ki zaten burda sorun olsaydı 25,37 gibi bir değeri de göstermez ya da hata falan verirdi uyarırdı ama öyle bişey de yok. :?
Bu işi Field Editör ile yapmanın bir yolu var mı yani actif pasif olayı gibi. Yani kullanmıyacağım field ı pasif etme daha sonra aktif etme gibi :?
Cevapla