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.

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.
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.
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.
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.
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.
RSS feed for comments on this post. TrackBack URL
Eline saglik, epey isime yaradi