Listview edit

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Listview edit

Mesaj gönderen Dostk »

Selam;

Listviewde seçili olan satırın bilgilerini edit e çekmek istiyorum; fakat olmadı bu konuda kaynak da bulamadım :D, verileri edite nasıl çekebilirim?

Kod: Tümünü seç


            if Items[I].Checked then
            begin
              with ListView.Items.Add do
              begin
                Form7.Edit1.Text := LItem.Text;
                Form7.Edit2.Text := LItem.Data[TMultiDetailAppearanceNames.Detail1];
                Form7.ComboBox.ItemIndex :=LItem.Data[TMultiDetailAppearanceNames.Detail2];
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Listview edit

Mesaj gönderen fesiharslan »

Merhaba;
Aşağıdaki gibi kullanarak edit'lere aktarabilirsiniz.

Kod: Tümünü seç

  if Items[I].Checked then
            begin
              with ListView.Items.Add do
              begin
                Form7.Edit1.Text := Text;
                Form7.Edit2.Text :=      Data[TMultiDetailAppearanceNames.Detail1];
                Form7.ComboBox.ItemIndex :=Data[TMultiDetailAppearanceNames.Detail2];
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Re: Listview edit

Mesaj gönderen Dostk »

Hocam sizin paylaştığınız ve bir çok yöntem denemdim bir türlü olmadı, telefon rehberindeki verilerini edite alıp daha sonra databaseye kaydetmek istiyorum fakat ne edit nede databaseye bilgileri çekemdim ve resimdeki hatayı alıyorum;

Hata kodu:
([DCC Fatal Error] UMain.pas(88): F2063 Could not compile used unit 'TelefonRehberi.pas')

Resim

Kod: Tümünü seç

for I in TelefonListView.Items.CheckedIndexes(True) do
  begin
    with TelefonListView.Items.Add do
    begin
      With TFDQuery.Create(Nil) do
      begin
        Connection := Form1.FDConBaglan;
        Close;
        SQL.Clear;
        SQL.Add('Select * From User Where ADI=:KD');
        ParamByName('KD').AsString := Data[TMultiDetailAppearanceNames.Detail1];
        Prepared := True;
        Open;
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Listview edit

Mesaj gönderen fesiharslan »

Dostk yazdı:Hocam sizin paylaştığınız ve bir çok yöntem denemdim bir türlü olmadı, telefon rehberindeki verilerini edite alıp daha sonra databaseye kaydetmek istiyorum fakat ne edit nede databaseye bilgileri çekemdim ve resimdeki hatayı alıyorum;

Hata kodu:
([DCC Fatal Error] UMain.pas(88): F2063 Could not compile used unit 'TelefonRehberi.pas')

Resim

Kod: Tümünü seç

for I in TelefonListView.Items.CheckedIndexes(True) do
  begin
    with TelefonListView.Items.Add do
    begin
      With TFDQuery.Create(Nil) do
      begin
        Connection := Form1.FDConBaglan;
        Close;
        SQL.Clear;
        SQL.Add('Select * From User Where ADI=:KD');
        ParamByName('KD').AsString := Data[TMultiDetailAppearanceNames.Detail1];
        Prepared := True;
        Open;
Aşağıdaki şekilde deneyin.

Kod: Tümünü seç

for I in TelefonListView.Items.CheckedIndexes(True) do
  begin
    with TelefonListView.Items.Add do
    begin
      With TFDQuery.Create(Nil) do
      begin
        Connection := Form1.FDConBaglan;
        Close;
        SQL.Clear;
        SQL.Add('Select * From User Where ADI=:KD');
        ParamByName('KD').AsString := (Objects.FindDrawable('det1') as TListItemText).Text;//Data[TMultiDetailAppearanceNames.Detail1];
        Prepared := True;
        Open;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Listview edit

Mesaj gönderen SimaWB »

Dostk yazdı:Hocam sizin paylaştığınız ve bir çok yöntem denemdim bir türlü olmadı, telefon rehberindeki verilerini edite alıp daha sonra databaseye kaydetmek istiyorum fakat ne edit nede databaseye bilgileri çekemdim ve resimdeki hatayı alıyorum;

Hata kodu:
([DCC Fatal Error] UMain.pas(88): F2063 Could not compile used unit 'TelefonRehberi.pas')

Resim
Sanırım sorun içiçe kullanılan 2 with yüzünden.
Hem TelefonListView.Items.Add 'in hem de TFDQuery.Create(Nil)'in Data özelliği var. Siz Data[TMultiDetailAppearanceNames.Detail1] kullandığınızda derleyici en son kullanılan with'i yani TFDQuery.Create(Nil)'i kullanmaya çalışıyor. Dolayısıyla hata alıyorsunuz.

Bir çok çözüm yolu var. İlk aklıma gelen ListView'e Item eklemek için bir TListViewItem tanımlanabilir.

Kod: Tümünü seç

var
LItem: TListViewItem;
Sonra yeni kayıt ekleme kısmını şu şekilde değiştirebilirsiniz:

Kod: Tümünü seç

LItem := TelefonListView.Items.Add;
With TFDQuery.Create(Nil) do
begin
//bu blok içinde artık LItem'ı kullanabilirsiniz.
//LItem.Text;
//LItem.Data[TMultiDetailAppearanceNames.Detail1];
//vs
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Re: Listview edit

Mesaj gönderen Dostk »

Bir çok yöntem denemdim olmadı bu konuyla ilgili her hangi bir örnekte yok nette...

Kod: Tümünü seç

var
  LItem: TListViewItem;
  UserKontrol, UserKontrol2: String;
begin
  for I in TelefonListView.Items.CheckedIndexes(True) do
  begin
    LItem := TelefonListView.Items.Add;
    
    UserKontrol := LItem.Data[TMultiDetailAppearanceNames.Detail1];
    
     UserKontrol2 := ParamByName('KD').AsString := (Objects.FindDrawable('Detail1') as TListItemText).Text;//
    
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Listview edit

Mesaj gönderen fesiharslan »

Dostk yazdı:Bir çok yöntem denemdim olmadı bu konuyla ilgili her hangi bir örnekte yok nette...

Kod: Tümünü seç

var
  LItem: TListViewItem;
  UserKontrol, UserKontrol2: String;
begin
  for I in TelefonListView.Items.CheckedIndexes(True) do
  begin
    LItem := TelefonListView.Items.Add;
    
    UserKontrol := LItem.Data[TMultiDetailAppearanceNames.Detail1];
    
     UserKontrol2 := ParamByName('KD').AsString := (Objects.FindDrawable('Detail1') as TListItemText).Text;//
    
Merhaba;
LItem.Data[TMultiDetailAppearanceNames.Detail1]; satırlarında hata alıyorsanız. LItem.Data[] yapısı yerine tüm detay alanlarından bilgi almak için FindDrawable yöntemini kullanın.
  • LItem.Data[TMultiDetailAppearanceNames.Detail1] yerine TListItemText(LItem.Objects.FindDrawable('det1')).Text kullanın.
    LItem.Data[TMultiDetailAppearanceNames.Detail2] yerine TListItemText(LItem.Objects.FindDrawable('det2')).Text kullanın.
    LItem.Data[TMultiDetailAppearanceNames.Detail3] yerine TListItemText(LItem.Objects.FindDrawable('det3')).Text kullanın.
Daha açıklayıcı olması açısından birazdan örnek bir uygulama paylaşacağım.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Listview edit

Mesaj gönderen fesiharslan »

ListView nesnesinde seçili olan kaydı Edit'lere aktarma örneği;
Resim
Link: https://mega.nz/#!iF012CjK!43LaiouYmXHv ... u-XRcJY_RE
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Re: Listview edit

Mesaj gönderen Dostk »

Çok teşekkür ederim, paylaşımda bulunan herkese;

Sorunu kısmen çözdüm tek kafamın takıldığı nokta ise (TListItemText(TAppearanceListViewItem(Items).Objects.FindDrawable('det1')).Text) biraz kulağı ters den tutmaya benzedi listviewden verileri almak bu kadar uzun kod yapısıyla olmamalı diye düşünüyorum...

Kod: Tümünü seç

var
  LItem: TListViewItem;
  KadiTel, KadiName: String;
begin
  with ListView do
  begin
    for I in Items.CheckedIndexes(True) do
    begin
      KadiTel := Items[I].Text;
      KadiName := TListItemText(TAppearanceListViewItem(Items[I]).Objects.FindDrawable('det1')).Text;
      begin
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Listview edit

Mesaj gönderen fesiharslan »

Dostk yazdı:Çok teşekkür ederim, paylaşımda bulunan herkese;

Sorunu kısmen çözdüm tek kafamın takıldığı nokta ise (TListItemText(TAppearanceListViewItem(Items).Objects.FindDrawable('det1')).Text) biraz kulağı ters den tutmaya benzedi listviewden verileri almak bu kadar uzun kod yapısıyla olmamalı diye düşünüyorum...

Kod: Tümünü seç

var
  LItem: TListViewItem;
  KadiTel, KadiName: String;
begin
  with ListView do
  begin
    for I in Items.CheckedIndexes(True) do
    begin
      KadiTel := Items[I].Text;
      KadiName := TListItemText(TAppearanceListViewItem(Items[I]).Objects.FindDrawable('det1')).Text;
      begin
Aslında çok zor değil.
Sizde açıklanamayan özel bir istisna (DCC Fatal Error) olmuş. MultiDetail Component'inin kurulumunda veya daha başka bir nedenden dolayı ILItem.Data[TMultiDetailAppearanceNames.Detail1] kod yapısını kullanamadınız.

Delphi Berlin 10.1 sürümünde MultiDetail yapısı entegreli geldiği için

Kod: Tümünü seç

LItem.Data['Text1']:='Delphi Türkiye';
yazmanız yeterli oluyor.

İyi çalışmalar
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Listview edit

Mesaj gönderen brs »

Ferit hocam;

İki yöntem denedim (LItem.Data['Text'] := 'ssss';) veya (LItem.Data['Text1'] := '1111';) bu iki yöntemide denedim fakat hiçbir durumda databaseden veriler gelmiyor...

Kod: Tümünü seç

     
     LItem.Text := C.Phones[0].Number; // databasene veri çekiyor
      LItem.Data['Text'] := 'ssss';// databasene veri gelmiyor
      LItem.Data['Text1'] := '1111';// databasene veri gelmiyor
      LItem.Data['Text2'] := 'Gruba kayıtlı değil'; // databasene veri çekiyor
      LItem.Data['Text3'] := DateToStr(Date);// databasene veri çekiyor
    end;
Designer den bağlantı yapınca verileri listviewe sorunsuz geliyor...
Resim
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Listview edit

Mesaj gönderen fesiharslan »

brs yazdı:Ferit hocam;

İki yöntem denedim (LItem.Data['Text'] := 'ssss';) veya (LItem.Data['Text1'] := '1111';) bu iki yöntemide denedim fakat hiçbir durumda databaseden veriler gelmiyor...

Kod: Tümünü seç

     
     LItem.Text := C.Phones[0].Number; // databasene veri çekiyor
      LItem.Data['Text'] := 'ssss';// databasene veri gelmiyor
      LItem.Data['Text1'] := '1111';// databasene veri gelmiyor
      LItem.Data['Text2'] := 'Gruba kayıtlı değil'; // databasene veri çekiyor
      LItem.Data['Text3'] := DateToStr(Date);// databasene veri çekiyor
    end;
Designer den bağlantı yapınca verileri listviewe sorunsuz geliyor...
Resim
LItem tanımlamanız, muhtemelen TListViewItem tipindedir. Doğal olarak Cast edilmesi gerekiyor. LItem tipini, TListItemText tipine dönüştürerek işlem yapabilirsiniz.

Kod: Tümünü seç

     
      LItem.Text := C.Phones[0].Number; 
      TListItemText(LItem.Objects.FindDrawable('Text1')).Text:= '1111';
      TListItemText(LItem.Objects.FindDrawable('Text2')).Text:= := 'Gruba kayıtlı değil'; 
      TListItemText(LItem.Objects.FindDrawable('Text3')).Text:=  := DateToStr(Date);
    end;
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Listview edit

Mesaj gönderen fesiharslan »

Delphi Berlin 10.1 sürümü için ise yalnızca

Kod: Tümünü seç

 LItem.Data['Text1']:='Gruba kayıtlı değil';
yazmanız yeterli oluyor.
Cevapla