Konuyu Oyla:
  • Derecelendirme: 5/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ListView içinde veri saklamak
#11
Yazdığın örnekte şunu neden kullanmaya çalıştığını anlayamadım:
Item.Data['Region'] := pointer(monitor);

Sen zaten verilerini Item.Data içinde saklayabiliyorsun:
Item.Data['SiraNo'] := dm.tblMonitor.Fields[COL_SIRA_NO].AsInteger;
Item.Data['Region'] := dm.tblMonitor.Fields[COL_REGION].AsString;

Bu şekilde kullanmayı kabul edersen bir sınıf yada record tanımı yapmana gerek kalmaz. Ayrıca hafızayı temizlemekle de uğraşmazsın...

Listview'ın ItemClick'inde sakladığın verileri okumak için:
procedure TForm1.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);
begin
  ShowMessage(AItem.Data['Region'].AsString);
end;
There's no place like 127.0.0.1
WWW
Cevapla
#12
(14-02-2020, Saat: 14:27)SimaWB Adlı Kullanıcıdan Alıntı: Yazdığın örnekte şunu neden kullanmaya çalıştığını anlayamadım:
Item.Data['Region'] := pointer(monitor);

Sen zaten verilerini Item.Data içinde saklayabiliyorsun:
Item.Data['SiraNo'] := dm.tblMonitor.Fields[COL_SIRA_NO].AsInteger;
Item.Data['Region'] := dm.tblMonitor.Fields[COL_REGION].AsString;

Bu şekilde kullanmayı kabul edersen bir sınıf yada record tanımı yapmana gerek kalmaz. Ayrıca hafızayı temizlemekle de uğraşmazsın...

Listview'ın ItemClick'inde sakladığın verileri okumak için:
procedure TForm1.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);
begin
  ShowMessage(AItem.Data['Region'].AsString);
end;

Amacım senin verdiğin örnek gibi veya Combobox içine Object doldurduğumuz gibi
ComboBox1.Items.AddObject('Veri', TObjectX)
TObjectX(ComboBox1.Items.Object[0]).Blabla
verileri doldurmak ve sonrasında erişim sağlamaktı.

İlk olarak söylediğin neden yazdım. Aşağıdaki şekilde Compiler hatası alıyordum veya ben yapamamış olabilir.
Item := pointer(monitor);
İkincisi evet verileri saklıyorum. Fakat bir sürü verim olacak. 15 veri var ön planda 5 adet bilgi göstereceğim fakat ihtiyaç durumunda kalan 10 adet veriye de ulaşmam gerekecek.
Item.Data['SiraNo'] := dm.tblMonitor.Fields[COL_SIRA_NO].AsInteger;
Item.Data['Region'] := dm.tblMonitor.Fields[COL_REGION].AsString;
 Bu şekilde saklayacak olursam her bir eleman için item create etmem gerekecek. En kötü durumda bu elemanları Desing Mode veya Run Time create ederek yaparım. Fakat ben bunları Object olarak doldurmak istiyorum. Daha kolay daha esnek. Sonrasında tüm verilere erişim sağlayacağım.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#13
TListViewItem'ın TagObject'i kullanılabilir belki. Yalnız o zaman record değil class kullanmak gerekecek. Ayrıca FMX olduğu için yeni sınıf TFmxObject'ten türetilmesi gerekebilir. Bu yeni sınıfın her örneği create edilirken Owner parametresi olarak ListView verilirse oluşturulan örnekleri hafızadan silmekle uğraşmayız diye tahmin ediyorum Smile
There's no place like 127.0.0.1
WWW
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi