cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen RADCoder »

Merhabalar arkadaşlar, hepinize kolay gelsin.
cxGrid kullandığım bir projemde şöyle bir sorunum var.
Miktar alanına hem miktar hemde kilogram bazında bilgi girilmekte, istediyim adet türünden olduğunda properties olarak calcedit, kilogram bazında bilgi girildiyinde currency gibi properti kullanmak. Maksat Adetli satış yaptığımızda tam sayı, kilogramlı satış yaptığımızda 1,300 KG gibisinden değer gire bilmek. Programsal tarafdan kodlarla bunu yapıyorum fakat, tüm hücrelerdeki miktar alanı en son değişikliye göre ayarlanıyor. Her satır için sütundaki propeertiyi değiştire bilirmiyiz?
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen m_ekici »

Merhaba
yapacağın işlem için properties i değiştirmek daha karmaşık olur. onun yernine currency seçip kuruş hanesini kapatmak daha kolay olmaz mı?

Ayrıca her satırda yapılacak işlemin farklı olması ile ilgili bir örnak vardı.

viewtopic.php?f=2&t=29903&hilit=cxEditR ... ry#p164210
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen csunguray »

Sütunun OnGetProperties event ini kullanarak bu işlemi gerçekleştirebilirsiniz. Forma bir adet TcxEditRepository bileşeni sürükleyin. Bu bileşeni çift tıklayıp kullanmak istediğininiz giriş stillerini oluşturun ve isimlendirin. Sonra hangi sütunu bir koşula göre şekillendirmek istiyorsanız o sütunun OnGetProperties olayına aşağıdaki benzeri bir kod ekleyin.

Kod: Tümünü seç

procedure TFormParamF.cxGridRegistryDBTableView1DEGER_INTGetProperties(
  Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
  var AProperties: TcxCustomEditProperties);
var
  AColumn: TcxCustomGridTableItem;
  Kod: String;
  GirisTuru: Integer;

begin
  inherited;
  AColumn := cxGridRegistryDBTableView1.GetColumnByFieldName('KOD'); // Kod sahasının hangi sütüun olduğu bulunuyor.
  Kod := VarToStr(ARecord.Values[AColumn.Index]); // Kod sahasının değeri alınıyor.
  GirisTuru := Falan Filan Falan; // Burada Kod sahasının değerine göre GirisTuru nun ne olması hesaplanmalı.
   case GirisTuru of
    1: AProperties := cxEditRepository1Text.Properties;
    2: AProperties := cxEditRepository1Float.Properties;
    3: AProperties := cxEditRepository1Integer.Properties;
    4: AProperties := cxEditRepository1EvetHayir.Properties;
    5: AProperties := cxEditRepository1ColorComboBox.Properties;
  else
    AProperties := cxEditRepository1Text.Properties;
  end;
end;

C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen RADCoder »

Merhabalar, Cevaplarınız için minnetdarım. Zaman ayırıp detaylı bilgi verdiyiniz için hepinize teşekkür ediyorum..

Verdiğiniz örnek üzerinden yola çıktım fakat bir kaç bilgiye yönelik hatamı düzeltmemde yardımcı olursanız daha düzgün anlamış olacağım.

İlk önce kullandığım Grid nesnesi, bir cxGridDBTableView deyil cxGridTableView'dir.
Yukardaki örnekleri ele alarak şöyle bir kod yazmış oldum.

Kod: Tümünü seç

procedure TForm1.cxGrid1TableViewBirimGetProperties(
  Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
  var AProperties: TcxCustomEditProperties);
var
  AColumn: TcxCustomGridTableItem;
  Kod: String;
  GirisTuru: Integer;

begin
  inherited;
  AColumn := cxGrid1TableView1.Controller.GridView.FindItemByName('cxGrid1TableViewBirim');
  Kod := VarToStr(ARecord.Values[AColumn.Index]); 
  GirisTuru := cxCalcEdit1.EditValue;
   case GirisTuru of
    1: AProperties := cxEditRepository1CalcItem1.Properties;
    2: AProperties := cxEditRepository1SpinItem1.Properties;
  end;

end;
Kodları derlediyimizde sorunsuz çalıştı fakat satır işlemi gerçekleştirdiyimde en son kayıt propertisini almakta, örnekleyecek olursam şöyle:

ilk kayıtda cxCalcEdit1.EditValue değerini 2 yaptıktan sonra, Birim alanıma 1.350 KG gibi bir değer girip, sonrasında cxCalcEdit1.EditValue değerini 1 yapıp aşağı inerek yeni bir kayıta bu sefer adet bazında 5 girdiyimde yukarıda eklemiş olduğum 1.350 değeri otomotik olarak 1.35 oluyor. cxCalcEdit1.EditValue değerini tekrar 2 yapıp aşağıya inip yeni bir satıra 2.235 KG bazında değer girdiyimde bu sefer ilk satırdaki 1.35 değişerek 1.350 oluyor ve ikinci satırda adet bazında eklemiş olduğum 5 değeri bu seferde 5.000 şekilinde oluyor.

NOT: Noktadan sonra düzgün değer elde etmek için (,0.000) şeklinde Display Format kullandığım için kaynaklandığını zann ediyorum. Böyle bir formatı nasıl bir yöntem ile elde ede biliriz?


Sonucunu şöyle elde etmek istemiştim:

------Değer---- -----Birim----
-------1.350----------KG-----
---------5------------Adet----
-------2.235----------KG-----
---------4------------Adet----
---------1------------Adet----
---------2------------Adet----

Malesef şu sonucu bir türlü elede edemedim.. Kod yazmadan bile bir fikir verirseniz çok sevinirim.
Tekrar teşekkürler. Kolay gelsin..
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen csunguray »

RADCoder yazdı:
AColumn := cxGrid1TableView1.Controller.GridView.FindItemByName('cxGrid1TableViewBirim');
Kod := VarToStr(ARecord.Values[AColumn.Index]);
GirisTuru := cxCalcEdit1.EditValue;
Madem giriş türünü cxCalcEdit1 den alacağız. Yukarıdaki iki satırda neden bu kadar işlem yaptık?

Kod: Tümünü seç

GirisTuru := StrToIntDef(Kod, 0);
veya Kod integer değilse

Kod: Tümünü seç

  if UpperCase(Kod) = 'ADET' then GirisTuru := 1;
  if UpperCase(Kod) = 'KG' then GirisTuru := 2;
deneyin.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen RADCoder »

Cevabınız için teşekkür ederim.
Yukarda verdiğim kodları tamamen örnek ve mantığı anlama amacıyla uyguladım.
Zaten GirisTuru olan kısımda değerin nerden geleceğinin önemi yok, Edit nesnesinden yahut farklı bir değişkenden gele bilir.
Sıkıntı olan kısım cxGridTableView da olan satırlarda eklenen değerler İnt ve Float olarak ayrılmıyor.
Müşteri 1 Kilogramlık bir şey aldığında, ben 1 yazdığımda onun 1.000 şu şekilde olması gerekiyor. Yahut 1 Kilo 200 gram gibi, değerde 1.200 olması gerekirken 1.2 gibi oluyor. Bunu düzeltmek için Display format kullanıyorum, fakat o zamanda eklediğim yere göre tam sayı değerleri float oluyor yahud tüm çekili değerler tam sayı oluyor..

Mutlaka vardır bir yoluda, ben uzun zamandır artık Delphi kullanmıyorum.
Yinede teşekkür ederim, Allah razı olsun değerli zamanınızı ayırdınız.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen csunguray »

Küçük bir örnek uygulama yazın gönderin. Üzerinde çalışalım.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen RADCoder »

Test.zip
(30.19 KiB) 155 kere indirildi
Merhabalar, dikkatiniz için çok teşekkür ediyor ve zamanınızı aldığım için özür diliyorum.
Projeyi ek olarak buraya ekledim. Umarım yapmak istediyimi düzgün şekilde anlatmışımdır.

Tekrar çok teşekkür ederim. Allah razı olsun..
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen csunguray »

Giriş türünü satırı eklerken belirlemeniz yetmez. Grid'in hangi satırı nasıl göstereceğini hatırlaması gerekir. Böyle bir durumda Birim bilgisini içeren bir sütun oluşturmanız ve satırı bu bilgiyle beraber eklemeniz gerekir. Örnek proje ektedir.

Test.zip
(14.01 KiB) 127 kere indirildi
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen RADCoder »

Merhabalar, Cevabınız ve yardımınız için minnetdarım.
Projemde tüşla ekleme olmadığı için bu yöntemi kullanamıyorum.
Ben olayı farklı bir şekilde şimdilik çözdüm.

Yardımınız için teşekkür ederim. Kolay gelsin..
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen freeman35 »

RADCoder yazdı:Ben olayı farklı bir şekilde şimdilik çözdüm.
Arkadaşlar vakit ayırıp, emek vermişler, yardım etmeye çalışmışlar. Çözümünü neden paylaşmıyorsun ?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: cxGrid ile her satır için, sütuna farklı properties ayarlamak.

Mesaj gönderen RADCoder »

Merhabalar, FreeMan. Aslında bir kod yada bir işlem kullanmış olsam yada konusu geçen mevzu ile ilgili burda yazılan kodlara ek bir satır kullanıp bir şeyler yazsaydım, elbetde burda paylaşırdım. Sonuçta benden başka birisininde ihtiyacı ola bilir. Yaptığın yorum ile foruma katıkıda bulunma çabanı taktir ediyorum. Fakat kilogram ve adet bazlı satışlar topdan satış yapılan depoda çekiye vurularak çeki başına düşen fiyatdan adetle satışa sunuldu.
Yani 10 Kilogramlık mehsuller halinde mesela 130 tl gibi fiyat konuldu. Satışınıda adetle giriliyor şimdilik. Bildiyin üzere 3 tane alırsa 390 tl gibi adet bazında hesapladık. Yukarıda yazdığım gibi, ben Delphiden ayrılalı oldu biraz. Herkese yardımları için teşekkür ediyorum..
Özelliklede sana teşekkür ederim..
Hepinizden Allah razı olsun.. Kolay gelsin..
Cevapla