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...
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
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
  OrangeUI Yeni Sürümü (1.78.3) Yayınlandı Fesih ARSLAN 6 470 26-04-2020, Saat: 23:13
Son Yorum: Fesih ARSLAN
  Yeni kimlik kartı NFC ile TCKN okuma otonomi 1 525 06-02-2020, Saat: 20:30
Son Yorum: narkotik
  Mobil Uygulamalarda Telefon üzerine kayıt işlemi Bay_Y 6 1.004 18-01-2020, Saat: 09:16
Son Yorum: Bay_Y
  OrangeUI Delphi 10.3.3 için Yeni Sürümü Yayınlandı Fesih ARSLAN 0 562 22-11-2019, Saat: 17:25
Son Yorum: Fesih ARSLAN
  Her yeni sürümde artan apk boyutu ? Mr.Developer 0 384 20-08-2019, Saat: 09:56
Son Yorum: Mr.Developer



Konuyu Okuyanlar: 1 Ziyaretçi