Taşınacak malzemeler ile ilgili verilerin (database alanlarının) tamamını TListView içinde saklamaya gerek olmadığını düşünüyorum. İstenilen işlem için birden fazla yöntemde çözüm elde etmek mümkün olacaktır. Fikir vermesi açısından aklıma gelen yöntemleri paylaşayım:
1- Taşınması gereken mevcut malzemeler için kullanıcının kolay anlayacağı açıklama vb bilgileri TListView içinde göstererek ve database işlemleri için gerekli KEY alanların verilerini TStringList içinde saklayarak (TListView içindeki indeks değeri ile TStringList içindeki indeks değeri aynı olacak şekilde); drag&drop zamanında hangi TListView indeksi taşınıyor ise database içinden bulmak adına TStringList içindeki aynı indeks verilerini kullanabilirsiniz.
Birden fazla database alanı KEY olaak tanımlı ise bir ayraç karakteri belirleyerek her alanı arka arkaya ayraç karakteri ile yine aynı TStringList indeksi içine kaydedebilirsiniz (örn: "tarih;saat" gibi). Okumak gereken noktada "geçici" bir TStringList oluşturarak TStringList.Delimiter karakteri ve TStringList.DelimitedText özellikleri ile her bir alanı kolayca okumak mümkün olacaktır.
Mevcut malzemeler içinden taşınan bilgiler TListView içinden ve TStringList içinden silinecektir. Aynı mantık ile taşınacak malzemeler içine geri getirilen bilgiler her iki listeye de eklenecektir.
2- Mevcut malzemelerverilerinin tamamını veya bir kısmını hafızada oluşturulacak bir tablo içinde tutabilirsiniz. KEY alanlar dahil herşey bu hafıza tablosunda olacağı için istenilen alanın bilgisi aranabilir/okunabilir/değiştirlebilir veya silinebilir olacaktır. Hafızada oluşturulacak tabloda ekstradan (mevcut malzemeler içinde olmayan) bir KEY alan ekleyerek TListView ile ilişkilendirmek mümkün olacaktır. Mevcut malzemeler içinden taşınan ürünler için hafıza tablosundan ürün bilgilerini çıkarmak Delete() prosedürünü çağırmak kadar kolay olacaktır. Ya da hafıza tablosuna ek alan tanımlayarak (örn: tasindi isminde bir alan) Edit() ve Post() ile taşınan verileri taşındı olarak işaretlemekte mümkündür.
Delphi ile kullanılabilecek birden fazla MemoryTable bileşeni mevcuttur. Bu anlamda en yaygın olarak bilinen ve ücretsiz versiyonu oldukça yeterli Components 4 Developers üretimi kbmMemTable tavsiye edebileceğim bir bileşendir. Bu ürün ile dizayn zamanında tablo alanlarını, indeks alanlarını, vb. belirleyebilirsiniz. Bu anlamda daha az kod yazarak kullanması mümkün bir bileşendir. Daha detaylı bilgi için:
http://news.components4developers.com/p ... Table.html
3- TListView içinde her bir taşınacak malzeme başına bir artan rakam ekleyerek (örn: "1- a malzemesi") taşınacak malzemelerin sadece KEY alanlarını saklayıp (yine gerekli ise belirlenmiş bir ayraç karakteri ile birden fazla alan tek bir string değer olarak kaydedilerek) fare taşıması esnasında ayrılarak ve SQL yardımı ile kaynak tablo içinden bilgileri okunup hedef tablo içine kaydedilebilir. Listede ilk açıldığında 10 taşınacak malzeme var ise taşımalar ardından bu sayı 7'ye düştü ise ve bir malzemenin taşınmasından vazgeçildi ve taşınacak malzemeler listesine geri alınacak ise bu kez geri gelen malzeme başına 11 rakamı (başa eklenen rakamlar sürekli artacak şekilde) eklenebilir. Bu kez TStringList içinde indeks numarası değil her bir verinin başındaki rakamlar kullanılarak eşleştirme yapılabilir.
4- Yukarıda açıklanmaya çalışılan 3 Numaralı yöntem ile 1 numaralı yöntem birleştirlerek kullanılabilir. Kullanıcı anlamlı ve açıklayıcı verileri ekranda görür, değerlerin başlarındaki rakamlar ile TStringList ile eşleştirme yapılabilir.
Yukarıdaki yöntemler dışında birçok farklı yöntem geliştirilebilir. Bu noktada mevcut malzeme listesinin büyüklüğü, yapılacak SQL işlemlerinin çokluğu, uygulamanın database sunucuya erişim şekli, uygulamanın çalışacağı bilgisayarın/bilgisayarların muhtemel özellikleri, fare ile taşıma işleminin ne kadar hızlı bir şekilde kullanıcıya görsel/duyusal cevap vermesi gerektiği ve daha sıralanabilecek her bir gereklilik seçilecek yöntemin belirlenmesinde rol oynayacaktır.
Bu anlamda soru sorulduğu anda mümkün olduğunca fazla detay verilmesi alınacak cevapların kullanılabilirlik ve uygulanabilirlik derecesini de artıracaktır.