cxGrid Incremental Search

Incremental Search

Developer Express tarafından üretilen ve müthiş bir ürün olan cxGrid de ki sayısız özelliklerden biri olan incremental search ile ilgili bilgi vermek istiyorum.

Yanlızca bir property ayarlayarak etkinleştirilen bu özellik grid içinde artan arama yapılmasına olanak veriyor.
Son kullanıcı sadece bulmak istediği değeri ekrana tuşluyor ve arama işlemi başlatılıyor.
İşte ayarlamamız gereken propery.

 
cxGridView1DBTableView1.OptionsBehavior.IncSearch := True
 

Arama yapıldığında aşağıdaki gibi bir görüntü oluşuyor. Eğer bir sonraki benzeyen değeri bulmak istiyorsak ctrl+aşağı ok veya ctrl+Yukarı Ok tuşları ile aramamıza devam edebiliyoruz.

Gelişmiş Incremental Search

cxGrid le gelen bu özellik güzel olmakla birlikte bir kaç eksikliğide vardır.Bu arama da sadece aradığımız metin ile başlayan değerleri bulabiliyoruz.

  1. Cümle içi arama yapamıyoruz
  2. Aksan duyarsız arama yapamıyoruz. Mesela türkçe harflerin yerini alabilecek alternatifleri ile bir kelimeyi arayamıyoruz.

Aşağıda verdiğim örnekler ile bu eksikleri manuel kapatmanın yolunu gösteriyorum. Umarım Developer express bu özellikleride içeren bir artan arama sistemi yapar.

İçinde geçenleri bulmak

Bu şekilde bir arama yapabilmek için değiştirmeniz gereken kod cxDataUtils unit içerisinde bulunuyor.

 
function DataCompareText(const S1, S2: string; APartialCompare: Boolean): Boolean;
 

Yukarda adı geçen fonksiyona bir parametre ekleyeceğim ve içerisinde geçen araması yapmasını sağlayacağız.

Aksan duyarsız arama

Bu şekilde aramaya destek verebilmek için yine aynı fonksiyonu değiştirmemiz yeterli. Bu gütüphaneye ConvertAscii fonksiyonu ekleyerek karşılaştırmalarda aksan duyarlılığını ortadan kaldırılmasını sağlayacağız.

Aranan metni seçili göstermek

Aradığımız metni doğru bir şekilde seçebilmek için cxGridCustomTableView unit içerisindeki

 
procedure TcxGridTableDataCellViewInfo.InitTextSelection;
 

procedure değiştireceğiz.

Anlattığım değişikliklerin hepsini içeren dosyayı buradan indirebilirsiniz.incsearch.txt

Bahsedilen değişiklikleri yaptığınızda aşağıdaki gibi bir görüntü oluşacak.

aşağıdaki fonksiyonlarda geçen DataCompareText kullanımlarına yeni eklediğimiz parametreyi geçmeliyiz.

 
function TcxDataControllerSearch.DoSearch
 bu fonksiyonda     if DataCompareText(S, ASubText, true,true)  olacak.
 
function TcxCustomDataController.FindRecordIndexByText
 
//bu fonksiyonda DataCompareText(S, AText, APartialCompare,false) şeklinde olacak
 
function TcxCustomDataController.DoIncrementalFilterRecord
// bu fonksiyonda   Result := DataCompareText(S, FIncrementalFilterText, True,false); olacak
 
unit cxLookupEdit procedure TcxCustomLookupEditLookupData.SyncSelected;
// bu procedure de       ASelected := DataCompareText(S, Edit.Text, False,true);
 
unit cxDBData function TcxDBDataProvider.DoLocate
//      Result := DataCompareText(S, ASubText, True,true);
 

yukardaki belirtilen unitler içinde kullanım bu şekilde olacaktır.

    • No Related Post
bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark
tabs-top

1 Comment »

  1. Sinan Says:

    Eline saglik, epey isime yaradi :)

    comment-bottom

RSS feed for comments on this post. TrackBack URL

Leave a comment