Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Yeni kayıt eklerken eski kayıdı silme
#1
Merhabalar.
Listviewde satır taşıma olayını  çözmeye çalışıyorum kayıdı istediğim yere taşıyabiliyorum. Eski kayıtı silmek istediğimde,
Taşıdığım satırı değilde bir önceki kayıt siliniyor. +1 ile test yaptığımda ise bu sefer başka kayıtlar siliniyor. 
Bu durumu nasıl çözerim?

for I := Listview1.Items.Count - 1 downto 0 do
        begin
          if Listview1.Items[I].Data['Marka'].ToString = 'Tofaş' then
          begin
            IYeni := Idxn; // Yeni index
            IOnce := Listview1.Items[I].Index; // Eski index

            Test := Listview1.Items[IOnce].Data['Marka'].ToString;

            Listview1.BeginUpdate;
            Listview1.Items.Insert(IYeni);
            Listview1.Items[IYeni].Data['Fiyat'] := Test;
            Listview1.Items.Delete(IOnce);
            Listview1.EndUpdate;
Cevapla
#2
insert ettiğinizde for döngüsü taça çıkıyor.

Hefefiniz index bulduğunuzda önce döngüden çıkmak ardından insert ve delete işleminyapmak olsun.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
(07-08-2018, Saat: 09:58)mrmarman Adlı Kullanıcıdan Alıntı: insert ettiğinizde for döngüsü taça çıkıyor.

Hefefiniz index bulduğunuzda önce döngüden çıkmak ardından insert ve delete işleminyapmak olsun.
Sayın mrmarman;

exit ile döngüden çıkınca bu sefer delete gerçekleşmiyor. 
Döngüden çıkarsam birden fazla kayıt seçildiğinde bu seferde kayıtları taşınmaz. Huh

  
           Listview1.BeginUpdate;
            Listview1.Items.Insert(IYeni);
            Listview1.Items[IYeni].Data['Fiyat'] := Test;
        Exit; 
            Listview1.Items.Delete(IOnce);
            Listview1.EndUpdate;
Cevapla
#4
Şimdi daha bir netleşti.
For döngüsü yerine while do veya repeat until tercih edin. Sayaçlar sizin kontrolünüzde olsun.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
(07-08-2018, Saat: 10:16)ahmetb Adlı Kullanıcıdan Alıntı:
(07-08-2018, Saat: 09:58)mrmarman Adlı Kullanıcıdan Alıntı: insert ettiğinizde for döngüsü taça çıkıyor.

Hefefiniz index bulduğunuzda önce döngüden çıkmak ardından insert ve delete işleminyapmak olsun.
Sayın mrmarman;

exit ile döngüden çıkınca bu sefer delete gerçekleşmiyor. 
Döngüden çıkarsam birden fazla kayıt seçildiğinde bu seferde kayıtları taşınmaz. Huh

  
           Listview1.BeginUpdate;
            Listview1.Items.Insert(IYeni);
            Listview1.Items[IYeni].Data['Fiyat'] := Test;
        Exit; 
            Listview1.Items.Delete(IOnce);
            Listview1.EndUpdate;

for dongusunden cıkmak için break komutunu kullanabilirsiniz. bu sekilde for dongusunun dısındaki komutlarda işlemiş olur
Cevapla
#6
(07-08-2018, Saat: 12:47)s_salci Adlı Kullanıcıdan Alıntı:
(07-08-2018, Saat: 10:16)ahmetb Adlı Kullanıcıdan Alıntı: Sayın mrmarman;

exit ile döngüden çıkınca bu sefer delete gerçekleşmiyor. 
Döngüden çıkarsam birden fazla kayıt seçildiğinde bu seferde kayıtları taşınmaz. Huh

  
           Listview1.BeginUpdate;
            Listview1.Items.Insert(IYeni);
            Listview1.Items[IYeni].Data['Fiyat'] := Test;
        Exit; 
            Listview1.Items.Delete(IOnce);
            Listview1.EndUpdate;

for dongusunden cıkmak için break komutunu kullanabilirsiniz. bu sekilde for dongusunun dısındaki komutlarda işlemiş olur

exit ile döngüden çıkınca bu sefer delete gerçekleşmiyor.
Döngüden çıkarsam birden fazla kayıt seçildiğinde bu seferde kayıtları taşınmaz.
Cevapla
#7
(07-08-2018, Saat: 15:11)ahmetb Adlı Kullanıcıdan Alıntı:
(07-08-2018, Saat: 12:47)s_salci Adlı Kullanıcıdan Alıntı: for dongusunden cıkmak için break komutunu kullanabilirsiniz. bu sekilde for dongusunun dısındaki komutlarda işlemiş olur

exit ile döngüden çıkınca bu sefer delete gerçekleşmiyor.
Döngüden çıkarsam birden fazla kayıt seçildiğinde bu seferde kayıtları taşınmaz.

EXIT'i kullandığınızda metoddan (prosedür veya fonksiyondan) çıkıyorsunuz, döngüden değil... Sadece döngüden çıkacaksanız "BREAK" komutunu kullanmalısınız...
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#8
Cevaplar için teşekkür ederim;

Fakat sorun for döngüsünden çıkıp çıkmama durumundan değil. Insert işleminden sonra silinmesini istediğim itemlerin indexleri (sıra no) değiştiği için delete işlemi saçmalıyor. Bunu nasıl çözebilirim?
Cevapla
#9
Evet haklısınız. İşte bu yüzden @mrmarman size silme işlemini döngü dışında yapın diyor.

Şöyle düşünün;
Silmek istediğiniz Item'ın indeksi = IOnce.
Ama siz öncesinde yeni bir Item daha eklediniz.
Dolayısıyla sizin silmek istediğiniz Item'ın index'i değişti.
Fakat siz hala indeksi IOnce olan Item'ı siliyorsunuz.



Silmek istediğiniz Item'ın indeksini değil de kendisini bir değişkende saklarsanız, daha sonra silmek istediğinizde bu sakladığınız değişkenin indeksine göre silme yapabilirsiniz:
var
  silenecek: TListItem;
...

  silinecek := Listview1.Items[I].Index;
...
...
...
  ListView1.Items.Delete(silinecek.Index);
There's no place like 127.0.0.1
WWW
Cevapla
#10
(07-08-2018, Saat: 18:06)SimaWB Adlı Kullanıcıdan Alıntı: Evet haklısınız. İşte bu yüzden @mrmarman size silme işlemini döngü dışında yapın diyor.

Şöyle düşünün;
Silmek istediğiniz Item'ın indeksi = IOnce.
Ama siz öncesinde yeni bir Item daha eklediniz.
Dolayısıyla sizin silmek istediğiniz Item'ın index'i değişti.
Fakat siz hala indeksi IOnce olan Item'ı siliyorsunuz.



Silmek istediğiniz Item'ın indeksini değil de kendisini bir değişkende saklarsanız, daha sonra silmek istediğinizde bu sakladığınız değişkenin indeksine göre silme yapabilirsiniz:
var
  silenecek: TListItem;
...

  silinecek := Listview1.Items[I].Index;
...
...
...
  ListView1.Items.Delete(silinecek.Index);

Detaylı bilgi için teşekkür ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Rehbere Kayıt Ekleme barissagir 6 300 04-04-2024, Saat: 09:36
Son Yorum: RAD Coder
  FMX excel kayıt guvenlik 8 1.465 04-05-2023, Saat: 11:27
Son Yorum: guvenlik
  Klasör silme Husv 6 1.299 03-03-2023, Saat: 12:54
Son Yorum: sabanakman
  Android de Rehberden kayıt silme barissagir 6 1.187 24-12-2022, Saat: 09:51
Son Yorum: barissagir
  Telefonda son kaydedilen fotoyu silme barissagir 2 522 23-11-2022, Saat: 23:34
Son Yorum: barissagir



Konuyu Okuyanlar: 1 Ziyaretçi