CxGrid FocusedItemChanged Mouse Tıklaması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

CxGrid FocusedItemChanged Mouse Tıklaması

Mesaj gönderen husonet »

S.a.

Amacım CxGrid de Hücreyi terkedeceğim zaman veri kontrolü yapmak kodum çalışıyor fakat mouse ile kayıtlar arasında tıklamalar yaptığımda kayıtlarım birbir siliniyor. Neyi yanlış yapıyorum acaba?

Kod: Tümünü seç

procedure TFrm_CariHesFisEkle.cxGrid1DBTableView1FocusedItemChanged(
  Sender: TcxCustomGridTableView; APrevFocusedItem,
  AFocusedItem: TcxCustomGridTableItem);
var
    Cari_Kod, Cari_Unvan:String;
begin
    //index Çıkış kontrolü
    cxGrid1DBTableView1.DataController.Post;
    if (cxgrid1DBTableView1.Controller.FocusedColumnIndex = 1) Then
    begin
        Cari_Kod := ibDetay.fieldByName('CARI_KOD').AsString;
        if Cari_Kod = '' Then
        begin
            cxGrid1DBTableViewCARIUNVAN.EditValue := '';
        end
        Else
        begin
            with IBQuery1 do
            Begin
                Close;
                Sql.Clear;
                Sql.Add('Select * From CARI Where CARI_KOD = '''+Cari_Kod+'''');
                Open;
            End;
            if (IBQuery1.Bof) and (IBQuery1.Eof) Then
            Begin
                ShowMessage('Cari Kod Yanlış!');
                cxGrid1DBTableViewCARIKOD.EditValue := '';
                cxgrid1DBTableView1.Controller.FocusedColumnIndex := 0;
            End
            else
            Begin
                cxGrid1DBTableViewCARIUNVAN.EditValue := ibQuery1.FieldByName('CARI_UNVAN').AsString;
            end;
        End;
    end
    Else
    //index Çıkış kontrolü
    if  (cxgrid1DBTableView1.Controller.FocusedColumnIndex = 2) Then
    begin
        if ibdetay.FieldByName('CARI_KOD').AsString = '' Then
        Begin
            Cari_Unvan := ibDetay.fieldByName('CARI_UNVAN').AsString;
            if Cari_Unvan = '' Then
            begin
                    cxGrid1DBTableViewCARIKOD.EditValue := '';
            end
            Else
            begin
                with IBQuery1 do
                Begin
                    Close;
                    Sql.Clear;
                    Sql.Add('Select * From CARI Where CARI_UNVAN = '''+Cari_Unvan+'''');
                    Open;
                End;
                if (IBQuery1.Bof) and (IBQuery1.Eof) Then
                Begin
                    ShowMessage('Cari Ünvan Yanlış!');
                    cxgrid1DBTableView1.Controller.FocusedColumnIndex := 1;
                    cxGrid1DBTableViewCARIUNVAN.EditValue := '';
                End
                Else
                begin
                    cxGrid1DBTableViewCARIKOD.EditValue := ibQuery1.FieldByName('CARI_KOD').AsString;
                end;
            End;
        end;
    End;
//    cxGrid1.Refresh;

end;
Teşekkür Ederim.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Hüseyin hatan cxgrid ile uğraşmak o yüzden olmuyor. HusoGrid bu tür işlerde çok iyi, tıkır tıkır çalışıyor :lol: :lol: :lol:
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

hdayi yazdı:Hüseyin hatan cxgrid ile uğraşmak o yüzden olmuyor. HusoGrid bu tür işlerde çok iyi, tıkır tıkır çalışıyor :lol: :lol: :lol:
Hocam daha betası bile çıkmadı :P

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Benimde programımın birinde böyle hücreyi terkedeceğim zaman veri kontrolü yapmam gerekiyordu, cxgridin bazı eventlarında bazı sorunlar yaşadım. Ben de queryimde ekli olan fieldlardan değişen fieldın oChange eventında yaptım kontrolümü. Şimdi sorunsuz çalışıyor.

Kod: Tümünü seç

procedure TFSfDetail.AQrUrmLineSrNoChange(Sender: TField);
begin
  if AQrUrmLineSrNo.Value = '' then exit;
  if AQrUrmListUntSrf.AsInteger > 0 then exit;
  AQrSrNo.Close;
  AQrSrNo.Parameters.ParamValues['ItmRef'] := AQrUrmLineTurID.Value;
  AQrSrNo.Parameters.ParamValues['LtDate'] := AQrSfDetailTarih.Value;
  AQrSrNo.Parameters.ParamValues['SrNo'] := AQrUrmLineSrNo.Value;
  AQrSrNo.Open;
  if AQrSrNo.RecordCount = 0 then
  begin
    ShowMessage(AQrUrmLineSrNo.Value+' Seri Numarası Geçerli bir Seri Numarası Değil');
    AQrUrmLineSrNo.Value := '';
  end
  else begin
    AQrUrmLineSLTRef.Value := AQrSrNoLOGICALREF.Value;
  end;
end;

Not: Umarım kodum anlaşılırdır :)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Sadece bu bileşen değil OnChange olaylarının procedure'leri içinde bizim bir şekilde eski haline döndürme operasyonları yapmak zorunluluğumuz varsa, tekrar aynı olayı tetikleyeceğini hesaba katıp ek bir IF kurgusu oluşturmamız lazım gelir...

- Yanlış okumadıysam,

Kod: Tümünü seç

FocusedColumnIndex = 1
şartı doğru ise açılan blokta; yanlış giriş tespit ettiğinde bunun yanlış olduğunu mesajla verdikten sonra değeri boşaltma operasyonu görüyorum.

- İşte bu durumun tekrar tetikleme yapacağını değerlendirdiğimden, kullanıcının yaptığı giriş ile senin yaptığın düzeltmeyi ayırt etmek için, en kestirmeden TAG değerini kullanarak değer verip, TAG eğer senin opsiyonunda ise IF'e girmesin, kullanıcının opsiyonunda ise IF'e girsin şeklinde yeniden kurgulamalısın diyorum.

- Yine de yanlış anlamış olabileceğimi tekrar bildiriyorum. OnChange olaylarında genelde rastlanan hatalardan olduğu için bu mesajımı yazıyorum...

@naile ilk satıra,

Kod: Tümünü seç

  if AQrUrmLineSrNo.Value = '' then exit; 
şeklinde bir kontrol ekleyip başarılı bir şekilde bertaraf etmiş... 8) Sen de bunu bir dene derim...

- Çalışmalarında başarılar...
Resim
Resim ....Resim
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

mrmcop yazdı:Merhaba...

- Sadece bu bileşen değil OnChange olaylarının procedure'leri içinde bizim bir şekilde eski haline döndürme operasyonları yapmak zorunluluğumuz varsa, tekrar aynı olayı tetikleyeceğini hesaba katıp ek bir IF kurgusu oluşturmamız lazım gelir...

- Yanlış okumadıysam,

Kod: Tümünü seç

FocusedColumnIndex = 1
şartı doğru ise açılan blokta; yanlış giriş tespit ettiğinde bunun yanlış olduğunu mesajla verdikten sonra değeri boşaltma operasyonu görüyorum.

Kod: Tümünü seç

FocusedColumnIndex = 1
Hocam Buradaki kontrol 0 index in 1 e transferi esnasında kontrol devreye giriyor yani 0 index post olduktan sonra içindeki veri işleniyor.
@naile ilk satıra,

Kod: Tümünü seç

  if AQrUrmLineSrNo.Value = '' then exit; 
şeklinde bir kontrol ekleyip başarılı bir şekilde bertaraf etmiş... 8) Sen de bunu bir dene derim...
Exit yordamlarıyla da her kontrol sonucunda Exitledim kayıtlar arasında mouse tıklaması yine kayıtları siliyor.

Ayrıca Naile Hanım'ın kodları her Change olduğunda hata mesajını veriyor.

Naile Hanıma göre düzenlediğim hali.

Kod: Tümünü seç

procedure TFrm_CariHesFisEkle.IBDetayCARI_KODChange(Sender: TField);
VAR
    Cari_Kod: String;
begin
    if IBDetayCARI_KOD.AsString = '' then
        exit;
    Cari_Kod := ibDetay.fieldByName('CARI_KOD').AsString;
    with IBQuery1 do
    Begin
        Close;
        Sql.Clear;
        Sql.Add('Select * From CARI Where CARI_KOD = '''+Cari_Kod+'''');
        Open;
    End;
    if (IBQuery1.Bof) and (IBQuery1.Eof) Then
    Begin
        ShowMessage('Cari Kod Yanlış!');
        IBDetayCARI_KOD.AsString := '';
        cxgrid1DBTableView1.Controller.FocusedColumnIndex := 0;
    End
    else
    Begin
        IBDetayCARI_UNVAN.AsString := ibQuery1.FieldByName('CARI_UNVAN').AsString;
    end;
end;
Teşekkür Ederim

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Tamam Sorun u çözdüm Başka bir event te yaptığım post işlemi sebep oluyormuş. Naile Hanımın Koduyla hallettim.

@MrmCop ve @Naile Hanıma Teşekkürler.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla