cxGrid içinde kayıt ekleme sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
iason
Üye
Mesajlar: 38
Kayıt: 18 Kas 2003 02:01
Konum: İstanbul
İletişim:

cxGrid içinde kayıt ekleme sorunu

Mesaj gönderen iason »

Merhabalar,
Delphi5 ve QuantumGrid5 kullanıyorum. Bir projemde grid içerisinde veritabanından kayıt listelemek ve aynı grid içerisinde bu kayıtlara yenilerini eklemek istiyorum.
Kayıt ekleme moduna geçtiğinde bir arama listesi açtırıp bu listeden bir kayıt seçtirip bu kaydın bazı verilerini griddeki değişik alanlara yazdırıyorum ve grid içerisindeki 3 alanı da kullanıcının değiştirmesini bekliyorum.
Ancak bu alanlardan birini değiştirdiği anda benim daha önce diğer alanlara yazdırdığım bilgiler kayboluyor. Benim düşüncem bir alanı değiştirdiğimde grid hemen post yapmaya çalışıyor. Ben ise tüm alanları değiştirdikten sonra enter tuşuna basarak post yaptırmak istiyorum. Belki basit bir yöntemdir ama devexpress forumlarında boğuldum resmen.

Kayıt seçme ekranı açılıp kayıt seçildikten sonra gridin değişik alanlarına bu kayıtları yazdırmayı aşağıdaki kod ile yapıyorum. Bu yöntemi mi değiştirmek lazım acaba?

Kod: Tümünü seç

  
with dbcgrDetailView.DataController do
  begin
    Values[FocusedRecordIndex, dbcgrDetailViewMaterialDescription.Index] := aspMaterialSearch.FieldByName('item_description').AsString;
    Values[FocusedRecordIndex, dbcgrDetailViewStockAmount.Index] := aspMaterialSearch.FieldByName('total_stock_amount').Value;
    Values[FocusedRecordIndex, dbcgrDetailViewTaxRate.Index] := aspMaterialSearch.FieldByName('mmr_sales_tax_rate').Value;
    Values[FocusedRecordIndex, dbcgrDetailViewMmrId.Index] := aspMaterialSearch.FieldByName('mmr_id').Value;
    Values[FocusedRecordIndex, dbcgrDetailViewUnit.Index] :=  aspMaterialSearch.FieldByName('unit_number').Value;

    dbcgrDetailViewQuantity.Focused := True;
  end;
Dataset olarak AdoStoredProc kullanıyorum ve kullanmak zorundayım, değiştiremem.
Bu içine bilgi yazdığım alanlar datasete bağlı bounded alanlar. Zaten unbound yaptığımda bu şekilde değer yazamıyorum içlerine.

Teşekkürler, iyi geceler.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: cxGrid içinde kayıt ekleme sorunu

Mesaj gönderen freeman35 »

".....Values[..." bu zaten unbounded kullanma şekli, .cell[x,y] := diyebilirsin. StoredProc ado kullanmadım ama aynı mantık olmalı, yani field değerleri output(StoredProc çalıştıktan sonra db den dönenler), yazılan değerler ise parametredir(input).
Memtable kullanıp işlem bittiğinde memtable daki kayıtlara göre döngüye sokup StoredProc çalıştırmak daha mantıklı. cxgrid in yüzlerce parametresi var, immidiatepost mesela her tuştan sonra değeri enterlanmış gibi ilgili eventleri tetikletir. vs vs
kolay gele
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ı
iason
Üye
Mesajlar: 38
Kayıt: 18 Kas 2003 02:01
Konum: İstanbul
İletişim:

Re: cxGrid içinde kayıt ekleme sorunu

Mesaj gönderen iason »

Teşekkürler ancak söylediklerinizden pek bir şey anlamadım.
Values unbounded kullanma şekli demişsiniz ancak mesajda da belirttiğim gibi unbounded alana bu şekilde değer atamıyorum. cell[x,y] dediğiniz şeyi neyin altından çalıştırabilirim?
Birde imediatepost özelliği dediğiniz işi yapıyor. Ben tam tersi istiyorum. Bu özellik false olduğu halde bir alanı değiştirdiğimde diğer doldurduğum alanlar boşalıyor.
Memtable olayını hiç bilmiyorum. Bir örnek verebilir misiniz?
Kullanıcı avatarı
iason
Üye
Mesajlar: 38
Kayıt: 18 Kas 2003 02:01
Konum: İstanbul
İletişim:

Re: cxGrid içinde kayıt ekleme sorunu

Mesaj gönderen iason »

Bu arada alanları unbounded yaptığımda SetEditValue fonksiyonu ile değerleri yazdığımda silinmiyor. Ancak bounded alanda bu fonksiyonu kullanamıyorum.
Kullanıcı avatarı
iason
Üye
Mesajlar: 38
Kayıt: 18 Kas 2003 02:01
Konum: İstanbul
İletişim:

Re: cxGrid içinde kayıt ekleme sorunu

Mesaj gönderen iason »

Sanırım benim mantığımda bir hata var. Bounded alanları dataset harici dışarıdan değiştirdiğimde ve grid bir şekilde refresh olduğunda (bir alanın değerini editlediğimde grid refresh ediyor sanırım) bu alanlar eski değerini (ilk kayıt için boş) alıyorlar sanırım. Bu durum mantıksız değil. Griddin datacontrolleri içerisinde smartrefresh özelliği açık durumda. Bununla ilgili olabilir mi dedim ama kapattığımda da değişmiyor sonuç.
Bu şekilde kodla değiştirdiğim alanları unbounded olarak belirleyip, datasetten gelen değerleri de bu alanları kodda kendim yazdırma yolunu seçeceğim.

Teşekkürler.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: cxGrid içinde kayıt ekleme sorunu

Mesaj gönderen freeman35 »

Bende windows ve cxgrid yok, iki yıla yakındırda kullanmıyorum, isimleri değişmiş yada yanlış yazmış olabilirim. Ben kod yazmam, onun yerine anlatmayı tercih ederim ki öğrenmek esas olsun. cell örnek olsun diye vermiştim, stringgrid hücrelerine erişmeye benzediği için, cx de öyle bir komut yoktu.(değişmediyse)
bounded dataset ten bir field bağlandıysa, unbounded ise gride, field bağlı olmadan eklenmiş kolon tipi. bu yüzden field bağlı olmayan alana veri girebilirsin, diğerine girsen bile bu direk bağlı field a aktarılır, yani db edit modda geçer ve field a değer atanır. Immidatepost "klavye" den basılan her tuş eventleri tetikler, codla yapılan bir atama zaten immidatepost olsada olmasada işlem bittiği için eventler tetiklenir arada fark bu.
AdoStoredProc bu nasıl çalııyor bunu incele, yani bu table gibi mi çalışıyor? ne ado nede maykisql le iş yapmadım, 1-2 işim oldu onlarda direk adoquery kullandım geçtim. Firebird e göre anlatayım, storeproc la veri kaydedemezsin, sp ler kayıt için değil sorgu döndürmek için. cx fazlasıyla karmaşık bir set, help inde event özellikleri ne işe yaradıkları anlatılmıştır. Ilk mesajımdada yazdım, memtable kullanman daha kolay olacaktır.
Kolay gele
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 !!!
Cevapla