Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Listview data verilerini alma
#1
Merhaba;

listview appearance dynamic yöntemiyle yaklaşık 50 yakın data alanı oluşturdum. Tek, tek datadan verileri almaktan ise,
seçili olan satırın datalarını döngü içinde nasıl alabilirim?

      begin
       xx := Listview1.Selected.Index;
        for xx := 0 to Listview1.Items.Count - 1 do
        begin
      showmessage(Listview1.Items[xx].Data[' ? '].ToString);
     end;
Cevapla
#2
ListView1.Selected.Data
There's no place like 127.0.0.1
WWW
Cevapla
#3
Listview Item Click secilen satırın bilgilerini sorunsuz alıyorum.
Buton ile almak istediğimde adres hatası alıyorum.

Adres hatası alıyorum:
procedure TForm1.BtnKayitClick(Sender: TObject);
var
  I: Integer;
  AItem: TListViewItem;
begin
  if Listte.Selected <> Nil then
  begin
    for I := 0 to Listte.Items.Count - 1 do
    begin
      showmessage(AItem.Objects[I].Data.AsString);
    end;
  end;
end;


Sorunsuz listeliyorum:
procedure TForm1.ListteItemClick(const Sender: TObject;
  const AItem: TListViewItem);
var
  I: Integer;
begin
  for I := 0 to Listte.Items.Count - 1 do
  begin
    showmessage(AItem.Objects[I].Data.AsString);
  end;
end;
Cevapla
#4
@Abdullah ILGAZ ın bu konudaki demosunu inceleyebilirsiniz:
https://github.com/ilgazdc/TListViewItemDemo
There's no place like 127.0.0.1
WWW
Cevapla
#5
Atladığınız nokta AItem tanımı.

hata veren procedure içindeki döngü içinde, showmessage'nin hemen üzerine AItem'e i sayılı indexteki itemi atayın hata ortadan kalkacaktır. 
OnClick ile parametre ile gelen AItem, sizin ele aldığınız button altında tanımsızdır.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
@mrmarman hocam, (showmessage'nin hemen üzerine AItem'e i sayılı indexteki itemi atayın hata ortadan kalkacaktır.)  bu rayı anlamadım


procedure TForm1.BtnKayitClick(Sender: TObject);
var
  I: Integer;
  AItem: TListViewItem;
begin
  if Listte.Selected <> Nil then
  begin
    for I := 0 to Listte.Items.Count - 1 do
    begin

//??


      showmessage(AItem.Objects[I].Data.AsString);
    end;
  end;
end;
Cevapla
#7
AItem := Listte.Items[i] ;

olabilir mi?
önce ilgili item selected mi onu sormak ondan sonra atama yapmak en son olarak da object listesini almak lazım değil mi? 

Ayrıca object i olayı da uygun değil. j gibi bir başka alt index ister
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#8
@mrmarman Hocam döngüden dolayı sırayla sonraki kayıt bilgileri geliyor; Seçilen kayıt bilgileri değil. 
Bu durumu nasıl çözebilirim?

var
  I, J, Idx: Integer;
  AItem: TListViewItem;
begin
  if Assigned(Listte.Selected) then
  begin
    for I := 0 to Listte.Items.Count - 1 do
    begin
      Idx := Listte.Selected.Index;
      if Idx <> -1 then
      begin
        for J := 0 to Listte.Items.Count - 1 do
        begin
          AItem := Listte.Items[J];
          showmessage(AItem.Objects[J].Data.AsString);
        end;
      end;
    end;
  end;
end;
Cevapla
#9
Merhaba.

Genel örnekleme yapayım. Her item için çoklu veriyi farklı şekillerde tutabilirsiniz.

- Dilerseniz Normal DATA, 
- Dilerseniz RTTI, 
- Dilerseniz JSON olarak saklar 

.. ve sakladığınız şekilde okursunuz. 

Bunlara örnek aşağıdaki şekildedir. Not: Örnekler denenmiştir.

Normal DATA kullanımı :

Veri doldurma işlemi
procedure TForm1.Button1Click(Sender: TObject);
var
 i     : Integer;
 aItem : TListViewItem;
begin
 for i := 0 to 9 do
 begin
   aItem := Listte.Items.Add;
   aItem.Text   := Format('Text_%.2d', [i]);
   aItem.Detail := Format('Detail_%.2d', [i]);
   aItem.Data['1'] := 'adi:Muharrem';
   aItem.Data['2'] := 'soyadi:ARMAN';
   aItem.Data['3'] := 'dogumyeri:Ankara';
   aItem.Data['4'] := 'forum:www.delphican.com';
 end;
end;

Seçili ITEM için Veri listeleme
procedure TForm1.Button2Click(Sender: TObject);
var
 i  : Integer;
 AItem : TListViewItem;
begin
 if Listte.Selected = nil then Exit; // Seçili değilse çık

 AItem := TListViewItem( Listte.Selected );
 for i := 1 to 4 do begin
   ShowMessage( AItem.Data[ IntToStr(i) ].AsString );
 end;
end;



Şimdi de RTTI hali için örnek :

ortak TYPE tanımı
Type tVeri = Record
 adi,
 soyadi,
 dogumyeri,
 forum     : String;
end;

Veri doldurma işlemi
procedure TForm1.Button3Click(Sender: TObject);
var
  i      : Integer;
  aItem  : TListViewItem;
  icerik : tVeri;
begin
  for i := 0 to 9 do
  begin
    icerik.adi       := 'Muharrem - Item Idx:' + IntToStr(i);
    icerik.soyadi    := 'ARMAN - Item Idx:' + IntToStr(i);
    icerik.dogumyeri := 'Ankara - Item Idx:' + IntToStr(i);
    icerik.forum     := 'www.delphican.com - Item Idx:' + IntToStr(i);

    aItem := Listte.Items.Add;
    aItem.Text   := Format('Text_%.2d', [i]);
    aItem.Detail := Format('Detail_%.2d', [i]);
    aItem.Data['veri'] := RTTI.TValue.From( icerik );
  end;
end;

Seçili ITEM için Veri listeleme
procedure TForm1.Button4Click(Sender: TObject);
var
 i      : Integer;
 AItem  : TListViewItem;
 icerik : tVeri;
begin
 if Listte.Selected = nil then Exit; // Seçili değilse çık

 AItem  := TListViewItem( Listte.Selected );
 icerik := AItem.Data['veri'].AsType<tVeri>;
 ShowMessage( icerik.adi );
 ShowMessage( icerik.soyadi );
 ShowMessage( icerik.dogumyeri );
 ShowMessage( icerik.forum );
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#10
(15-09-2018, Saat: 08:38)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba.

Genel örnekleme yapayım. Her item için çoklu veriyi farklı şekillerde tutabilirsiniz.

- Dilerseniz Normal DATA, 
- Dilerseniz RTTI, 
- Dilerseniz JSON olarak saklar 

.. ve sakladığınız şekilde okursunuz. 

Bunlara örnek aşağıdaki şekildedir. Not: Örnekler denenmiştir.

Normal DATA kullanımı :

Veri doldurma işlemi
procedure TForm1.Button1Click(Sender: TObject);
var
 i     : Integer;
 aItem : TListViewItem;
begin
 for i := 0 to 9 do
 begin
   aItem := Listte.Items.Add;
   aItem.Text   := Format('Text_%.2d', [i]);
   aItem.Detail := Format('Detail_%.2d', [i]);
   aItem.Data['1'] := 'adi:Muharrem';
   aItem.Data['2'] := 'soyadi:ARMAN';
   aItem.Data['3'] := 'dogumyeri:Ankara';
   aItem.Data['4'] := 'forum:www.delphican.com';
 end;
end;

Seçili ITEM için Veri listeleme
procedure TForm1.Button2Click(Sender: TObject);
var
 i  : Integer;
 AItem : TListViewItem;
begin
 if Listte.Selected = nil then Exit; // Seçili değilse çık

 AItem := TListViewItem( Listte.Selected );
 for i := 1 to 4 do begin
   ShowMessage( AItem.Data[ IntToStr(i) ].AsString );
 end;
end;



Şimdi de RTTI hali için örnek :

ortak TYPE tanımı
Type tVeri = Record
 adi,
 soyadi,
 dogumyeri,
 forum     : String;
end;

Veri doldurma işlemi
procedure TForm1.Button3Click(Sender: TObject);
var
  i      : Integer;
  aItem  : TListViewItem;
  icerik : tVeri;
begin
  for i := 0 to 9 do
  begin
    icerik.adi       := 'Muharrem - Item Idx:' + IntToStr(i);
    icerik.soyadi    := 'ARMAN - Item Idx:' + IntToStr(i);
    icerik.dogumyeri := 'Ankara - Item Idx:' + IntToStr(i);
    icerik.forum     := 'www.delphican.com - Item Idx:' + IntToStr(i);

    aItem := Listte.Items.Add;
    aItem.Text   := Format('Text_%.2d', [i]);
    aItem.Detail := Format('Detail_%.2d', [i]);
    aItem.Data['veri'] := RTTI.TValue.From( icerik );
  end;
end;

Seçili ITEM için Veri listeleme
procedure TForm1.Button4Click(Sender: TObject);
var
 i      : Integer;
 AItem  : TListViewItem;
 icerik : tVeri;
begin
 if Listte.Selected = nil then Exit; // Seçili değilse çık

 AItem  := TListViewItem( Listte.Selected );
 icerik := AItem.Data['veri'].AsType<tVeri>;
 ShowMessage( icerik.adi );
 ShowMessage( icerik.soyadi );
 ShowMessage( icerik.dogumyeri );
 ShowMessage( icerik.forum );
end;



Bu güzel bilgi için sonsuz teşekkürler. Allah gönlünüze göre versin.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi FMX, geliştirdiğiniz uygulamanın log kaydını alma işlemi muratcelik64 3 290 22-03-2026, Saat: 05:00
Son Yorum: ovural
  Delphi FMX ile geliştirilen projenin yedeğini alma işlemi. muratcelik64 1 170 15-03-2026, Saat: 20:43
Son Yorum: mkysoft
  Android Kontakt, Telefon numaralarını alma.. ARM 1 624 09-03-2025, Saat: 07:00
Son Yorum: ARM
  Listview ve TBindSourceDB m_ekici 0 417 25-10-2024, Saat: 15:17
Son Yorum: m_ekici
  FMX Listview m_ekici 8 1.607 30-09-2024, Saat: 20:57
Son Yorum: RAD Coder



Konuyu Okuyanlar: 1 Ziyaretçi