CxGrid MultiSelect Toplamları

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

CxGrid MultiSelect Toplamları

Mesaj gönderen hasan »

Kolay gelsin Arkadaşlar .CxGrid te seçili olan satırların toplamını almak için aşağıdaki kodu yazdım demosundan bakarak.

Kod: Tümünü seç


procedure TToplu_Tahsilat_Formu.Taksit_Takip_GridDBTableView1SelectionChanged(
  Sender: TcxCustomGridTableView);



function SelectedRowCount: Integer;
  begin
   Result :=Taksit_Takip_GridDBTableView1.Controller.SelectedRowCount;
  End;

function GetSummOfSelection: Integer;
   var
    I, J: Integer;
    Kalan_Tutar: Integer;
    Vade_Farki : Variant;
   begin
     Result := 0;
    
  for I  := 0 to SelectedRowCount - 1 do begin
   
  Kalan_Tutar:=Taksit_Takip_GridDBTableView1.DataController.GetValue
  (Taksit_Takip_GridDBTableView1.Controller.SelectedRows[I].RecordIndex,7);
     

       
     if not VarIsNull(Kalan_Tutar) then
          Inc(Result,Integer(Kalan_Tutar));

      end;
  end;

begin
  SeciliSatirSayisi_Edit.Text     :=  FloatToStrF(SelectedRowCount, ffNumber,15,0);
  Secili_Toplam_Edit.Text  :=  FloatToStrF(GetSummOfSelection, ffNumber,15,4);
End;
bu kodu şöyle özelleştirmem gerekiyor.
Seçili satırlarda DOVIZID değeri var. Seçili DOVIZID ler aynı ise toplamı alacak ,Farklı ise toplamı almayacak editlerde değer göstermeyecek.
zaten şu haliyle de arkadaşlar eğer Kalan_Tutar satırındaki değerler ondalıklı değer ise, ondalıklı değerlerin toplamını getirmiyor.Şu satırdaki integer' dan dolayı ne yaptıysam olmadı.

Kod: Tümünü seç

Inc(Result,Integer(Kalan_Tutar)); 
bu konuda yardım edecek arkadaşlara tşk.Kolay gelsin...
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,
Öncelikle Kalan_Tutar alanını Currency olarak değiştir ve öyle toplam al, tabi integer typecast'inide kaldırman lazım
Anladığım DOVIZID kolonuna görede toplamı özelleştirmek istiyorsun, bunu yapmak için for döngüsünden sonra

Kod: Tümünü seç


if Taksit_Takip_GridDBTableView1.DataController.GetValue (Taksit_Takip_GridDBTableView1.Controller.SelectedRows[I].RecordIndex,
     Taksit_Takip_GridDBTableView1DOVIZID.Index) <> 'YTL' then continue;
gibi bir koşulla istemediğin tür döviz bilgisini toplama aldırtmazsın.

GetValue metodu bir RecordIndex bir de ItemIndex alır. ItemIndex alanı hangi kolonsa onun view'deki sırasıdır, o yüzden sabit sayılar kullanmak yerine o kolonun index özelliğini geçmeni tavsiye ederim.
Kolay gelsin
En son t-hex tarafından 29 Mar 2005 03:27 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

CxGrid MultiSelect Toplamları

Mesaj gönderen hasan »

Tşk ederim.Ama Kalan_tutar alanı zaten Currency tipinde imiş.integer type'ını kaldırdım ama yine olmadı.benim istediğim seçildiği anda satırlar eğer aynı para birimindeyse toplam almalı veya alsa bile aynı para biriminde ise göstermeli.demolara bakarak beceremedim.elinizde örnek varsa foruma yollayabilir misiniz?
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,
Birincisi ilk verdiğim cevaptaki kodda GetValue yazmayı unutmuşum önce bu haliyle dene.
İkincisi nasıl bir yapı oluşturduğunu görmeden bir cevap vermem. Ayrıca şu an kullandığım bilgisayarda QuantumGrid bileşenleri mevcut değil, o yüzden cevaplar gecikebilir. Ayrıca birkaç noktayı açıklığa kavuşturalım:
1)Taksit_Takip view'inde döviz cinsi kolonu mevcut mu?
2)Kullanıcı teker teker kayıtları seçtikten sonra mı toplam alınacak yoksa kullanıcı YTL döviz cinsinde bir satırın üzerine gelince bu türdeki bütün satırların toplamı mı alınacak?
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

CxGrid MultiSelect Toplamları

Mesaj gönderen hasan »

1-) table da DOVIZ_ID kolonu mevcut.
2-) Kullanıcı bunları seçtiği anda, satırdaki değerlerin hepsi aynı DOVIZID değeri içeriyosa toplama alacak , içermiyosa toplamı göstermeyecek veya aldırmayacak.

yani

KALAN_tutar DOVIZ
-------------- ---------
300 YTL
500 USD
700 EURO
600 YTL
800 USD
900 YTL
1.000 USD

rastgele satırlar işaretlenecek.Seçili kayıtların hepsi YTL veya hepsi USD ise toplamı aldıracak.

ŞİMDİDEN TŞK
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba
Ayaküstü böyle bir kod yazabildim. Deneme fırsatım yok.

Kod: Tümünü seç

var
 recordIndex,itemIndex:integer;
 tur : Variant;
 ok : boolean;
begin
  Result:=0;
  tur:='';
  for I  := 0 to SelectedRowCount - 1 do begin 
    with Taksit_Takip_GridDBTableView1.DataController do begin
      recordIndex :=  Taksit_Takip_GridDBTableView1.Controller.SelectedRows[I].RecordIndex;
      itemIndex := Taksit_Takip_GridDBTableView1DOVIZ_ID.Index;
      ok := (GetValue(recordIndex,itemIndex) = tur) or (tur='');
      tur := GetValue(recordIndex,itemIndex);
      if not ok then begin Result:=0; exit; end;
      Result:= Result + GetValue(recordIndex,Taksit_Takip_GridDBTableView1KALAN_TUTAR.Index);      
    end; 
  end;
end;
fonksiyon Currency döndürmeli
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

CxGrid MultiSelect Toplamları

Mesaj gönderen hasan »

Çok teşekkürler Ellerinize sağlık.sadece önceki dediğim sorun kalmış.
eğer KALAN_tutar alanındaki değerler ondalıklı ise ondalıklı olarak değerleri toplamıyor.

Mesela iki satır 20,5 YTL var .Toplamlarını 40 olarak gösteriyor.sadece bu kalmış.Gerçekten çok teşekkürler.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Kod: Tümünü seç

function GetSummOfSelection: Integer; 
   var 
    I, J: Integer; 
    Kalan_Tutar: Integer; 
    Vade_Farki : Variant; 
.
.
.
ilk yazdığın kodda, GetSummOfSelection fonksiyonunun döndürdüğü değer integer tanımlı onu Currency olarak değiştir, ayrıca toplam aldırırken inc procedureünü kullanma, onun yerine normal yaz, ayrıca yine ilk yazdığın kodda Kalan_Tutar alanı integer olarak tanımlanmış bunuda Currency olarak değiştir. yani değişken türlerini bir elden geçir. düzelmesi lazım.
Cevapla