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];
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];
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')
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;
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')
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;
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;
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')
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.
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;
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;//
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.
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...
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
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...
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
İ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...
İ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...
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...
LItem tanımlamanız, muhtemelen TListViewItem tipindedir. Doğal olarak Cast edilmesi gerekiyor. LItem tipini, TListItemText tipine dönüştürerek işlem yapabilirsiniz.