Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Listview içinde arada
#1
Selam, 

Databasedeki verileri listviewe listeliyorum, daha sonra listviewe yeni kayıt veya güncelleme yaptıktan sonra tekrar listviewdeki verileri databaseye kaydediyorum sıkıntısız. 

Fakat databaseye kayıt yapmadan önce listviewdeki kayıtlar içinde arama yapmak istediğimde listviewden dayabaseye kaydetmemişsem, kayıtlar arama sırasında gidiyor bu kayıtların tekrar gelmesini için nasıl bir yol izlemeliyim?

    

   Close;
    SQL.Clear;
    SQL.Add('Select * From URUN');
    SQL.Add('Where URUNADI Like ' + QuotedStr('%' + Ara.Text + '%'));
    Prepared := True;
    Open;
Items.Clear;
    try
      Items.BeginUpdate;
      while Not Eof do
      begin
        List := Items.Add;
        List.Caption := IntToStr(FieldByName('ID').AsInteger);
        List.SubItems.Add(FieldByName('TARIH').AsString);
        List.SubItems.Add(FieldByName('SIRANO').AsString);
        List.SubItems.Add(FieldByName('URUNADI').AsString);
        Next;
      end;
    finally
      Items.EndUpdate;
Cevapla
#2
Merhaba,
Kayıt arama işlemi için sorun bildirmişsiniz, fakat kayıtları ListView'e aktarma kodunuzu paylaşmışsınız.
Sorunun ne olduğunu anlamak için kayıt arama metodunuzu da paylaşabilirseniz, yardımcı olmaya çalışalım.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
Ve işte o an
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#4
(05-12-2017, Saat: 13:55)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
Kayıt arama işlemi için sorun bildirmişsiniz, fakat kayıtları ListView'e aktarma kodunuzu paylaşmışsınız.
Sorunun ne olduğunu anlamak için kayıt arama metodunuzu da paylaşabilirseniz, yardımcı olmaya çalışalım.

Sanırım yanlış anlaşılma oldu, EditChange aranan bir ürün varsa direk olarak listviewde listeliyorum.
Buraya kadar sorun yok, sorun edit yazılan ürün databasede varsa veya yoksa listvievdeki kayıtlar siliniyor. benim yapmak istediğim şey ise editden çıkıldığı anda databaseye kayıt yapılmamış olsa bile listviewdeki önceki kayıtların eskisi gibi listelenmesini istiyorum. 

Örnek: mobil uygulamalardaki gibi, mobilde listview Search özelliği var bu özelliğin aynısını VCLde yapmak istiyorum.

procedure TForm2.SearchEditChange(Sender: TObject);
begin
  With UQuery, LList do
  begin
Close;
    SQL.Clear;
    SQL.Add('Select * From URUN');
    SQL.Add('Where URUNADI Like ' + QuotedStr('%' + Ara.Text + '%'));
    Prepared := True;
    Open;
Items.Clear;
    try
      Items.BeginUpdate;
      while Not Eof do
      begin
        List := Items.Add;
        List.Caption := IntToStr(FieldByName('ID').AsInteger);
        List.SubItems.Add(FieldByName('TARIH').AsString);
        List.SubItems.Add(FieldByName('SIRANO').AsString);
        List.SubItems.Add(FieldByName('URUNADI').AsString);
        Next;
      end;
    finally
      Items.EndUpdate;
   end;
Cevapla
#5
Yine anlayamadım. Smile
Projenize eklemiş olduğunuz Search mantığını kavrayamadım. 
Mobil Platform yapısındaki Search işlemi Filter ile yapılmıştır. Yani veri tabanından bağımsız bir bileşendir. Buradaki mantığı anlayabilme adına; ListView'i TMemo gibi düşünebilirsiniz.
Yazmış olduğunuz tüm değerler geçici veya lokal bellektedir. Taki siz bu değerleri veri tabanına Post edene kadar. 
Uygulamanızda ListView üzerinde yer alan tüm satır ve sütunları içeren bir Filitreleme algoritması kurarak, yapabilirsiniz. 
Listview üzerindeki herhangi bir değişikliği de belirleyeceğiniz bir anda senkronize edebilirsiniz. 

FMX Search metodu (FMX.SearchBox): 
{ TSearchBoxModel }

procedure TSearchBoxModel.DoChangeTracking;
var
 Lower: string;
begin
 inherited;
 Lower := Text.Trim.ToLower;
 if SearchResponder <> nil then
   SearchResponder.SetFilterPredicate(function (X: string): Boolean
     begin
       Result := True;
       if Assigned(OnFilter) then
         OnFilter(Owner, Text, X, Result)
       else
         Result := Lower.IsEmpty or X.ToLower.Contains(Lower);
     end);
end;

FMX.ListView'de kullanımı da aşağıdaki gibidir.
procedure TListViewBase.SetFilterPredicate(const Predicate: TPredicate<string>);
var
 Filterable: IListViewFilterable;
begin
 if Supports(Adapter, IListViewFilterable, Filterable) then
   Filterable.Filter := Predicate;
end;
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ButtonedEdit veya Edit içinde Canvas ile çizim 3ddark 14 362 22-09-2018, Saat: 23:38
Son Yorum: ssahinoglu
  TreeViewi ListView gibi kullanma Dostk 0 115 10-07-2018, Saat: 16:04
Son Yorum: Dostk
  Program içinde resim üzerine yazi gonulali 1 220 06-06-2018, Saat: 11:29
Son Yorum: iyarar
  Uygulama içinde bekleme konumunda ekranda animasyon oynatma Bay_Y 13 557 11-05-2018, Saat: 08:18
Son Yorum: Tuğrul HELVACI
  SOAP içinde TWebbrowser kullanımı hk. barutali 7 970 13-07-2017, Saat: 15:44
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi