Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ListView içinde veri saklamak
#1
ListView'de listeme yaparken her satırda görünenlerin dışında veri(Object) saklamak için bir yöntem:

Örneğin; listview'de kişi bilgilerini gösteriyoruz; Ad ve soyad. 
Fakat kişinin ayrıca Telefon ve Doğum Tarihi bilgileri de var. Bunları da her listview satırı içinde saklamalı ve gerektiğinde kullanmalıyım.
Bunun için TListItem'dan bir sınıf türetip gerekli bilgilerimizi tanıtmalıyız:
TKisi = class(TListItem)
  private
    FAd: string;
    FSoyad: string;
    FTarih: TDateTime;
    FTelefon: string;
  public
    property Ad: string read FAd write FAd;
    property Soyad: string read FSoyad write FSoyad;
    property Tarih: TDateTime read FTarih write FTarih;
    property Telefon: string read FTelefon write FTelefon;
  end;

Daha sonra Listview'ın OnCreateItemClass olayında yukarıdaki sınıfımızı tanıtmamız gerekiyor:
procedure TForm1.ListView1CreateItemClass(Sender: TCustomListView; var ItemClass: TListItemClass);
begin
 ItemClass := TKisi;
end;

Artık Listview'a ekleme yaparken ve okurken TKisi sınıfını kullanabilirim:
var
  kisi: TKisi;
begin
  kisi := TKisi(ListView1.Items.Add);
  kisi.Ad := 'adım';
  kisi.Soyad := 'soyadım';
  kisi.Telefon := '0123456789';
  kisi.Tarih := Now;
  kisi.Caption := kisi.Ad + ' ' + kisi.Soyad; // Caption'a ekranda görünmesini istediğim bilgileri yazıyorum

Sakladığımız verileri okumak:
Örneğin listview'e çift tıklandığında:
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
  ShowMessage(TKisi(ListView1.Selected).Telefon);
end;

Bu kullanım şeklinin en büyük artısı: Sakladığım TKisi sınıfı verilerini Free etmekle uğraşmıyorum  Cool
There's no place like 127.0.0.1
WWW
Cevapla
#2
Necnelerin TAG özelliğine başka yöntemle bakış.. Elinize sağlık. Çok işime yarıyacak.
WWW
Cevapla
#3
Eline sağlık.
Cevapla
#4
Elinize sağlık. Zorlanıyordum bu tür durumlarda...
Cevapla
#5
ihtiyaç bir konu
Cevapla
#6
ilk yazıdaki kardeşimizin yöntemi hoş.
ama delfideki hemen her liste bileşeninde bu tür durumlar için DATA özelliği olabiliyor.
buraya oluşturduğunuz verinin referans adresini yazarsınız.

type
  TKisi = record
    Ad: string;
    Soyad: string;
    Tarih: TDateTime;
    Telefon: string;
  end;
  PKisi = ^TKisi;

procedure KisileriOlustur;
var
  Kisi: PKisi;
begin
  Kisi := new(PKisi);
  Kisi.Ad := "....";
  ....
  Liste[i].Data := Kisi;  
  //Listenin durumuna göre "pointer(Kisi), TObject(Kisi)" gibi şeyler de istenebilir.
end;

procedure KisileriSil;
begin
  Dispose(Liste[sira].Data);
  Liste[sira].Data:=nil;
end;
WWW
Cevapla
#7
(07-07-2018, Saat: 01:30)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol  Kisi := new(PKisi);
  
  Dispose(Liste[sira].Data);


Yukarıda Not kısmında da belirttiğim gibi; işte bu New ve Dispose'larla uğraşmamak için yukarıdaki yöntemden bahsetmek istemiştim Wink

Birilerinin işine yararsa ne mutlu bana....
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi