Ana içeriğe atla

(import)Listviewde Başlığa Göre Sıralama Nasıl Yapılır ?

Örneği olabildiğince geniş tutmaya çalışacağız. Listviewde yer alan string, integer, date ve time alanlarına göre sıralama yapacağız. Bunun için formun üstüne bir adet listview yerleştirelim. Listview'in ViewStyle özelliğini vsReport olarak ayarlayalım. Daha sonra Columns özelliğinden gerekli alanları tanımlayalım.
  • Dosya Adı
  • Boyut (KB)
  • Dizin
  • Tarih
  • Saat
Ardından items özelliğini kullanarak bu alanlara değer girelim. ListView'in OnColumnClick olayına giderek aşağıdakileri yazalım.

procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin fsort :=column.Index; ListView1.CustomSort(@customsortproc,0); end;

Burda yaptığımız işlem listviewde tıklanan sütunun numarasını alıp bir değişkende saklıyoruz ardından listview'in CostumSort metodunda daha sonra tanımlayacağımız bir fonksiyonun adresini belirtiyoruz. Sıralamayı yapacak olan fonksiyon burada belirtilen fonksiyonumuz olacak. Burda CallBack Function denen bi olay kullanılıyor. Bütün elemanlar için bu fonksiyon teker teker çağrılıyor. Bu konu hakkında daha fazla bilgiyi google'dan veya msdn den bulabilirsiniz. Şimdi CostumSortProc adlı fonksiyonu tanımlayalım.

implementation {$R *.dfm} function customsortproc(item1,item2:tlistitem;paramsprt:integer):integer;stdcall; begin case fsort of 0: result := lstrcmp(pchar(tlistitem(item1).Caption), pchar(tlistitem(item2).Caption)); 1: result := CompareValue(StrToInt(tlistitem(item1).SubItems[fsort-1]), StrToInt(tlistitem(item2).SubItems[fsort-1])); 2: result := lstrcmp(pchar(tlistitem(item1).SubItems[fsort-1]), pchar(tlistitem(item2).SubItems[fsort-1])); 3: result := CompareDate(StrToDate(tlistitem(item1).SubItems[fsort-1]), StrToDate(tlistitem(item2).SubItems[fsort-1])); 4: result := CompareTime(StrToTime(tlistitem(item1).SubItems[fsort-1]), StrToTime(tlistitem(item2).SubItems[fsort-1])); end End;

Fonksiyonu implementation satırından hemen sonra tanımlıyoruz. Ardından Fsort değişkenimizi tanımlıyoruz.
var Form1: TForm1; fsort:integer;
Ardından CompareDate, CompareValue adlı fonksiyonları içeren unitleride uses satırına ekliyoruz.
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls,math,dateutils, StdCtrls;
İşlem tamamlanmıştır. F9 ile çalıştırıyoruz :) örneği indirmek için buraya tıklayabilirsiniz.

Yorumlar

Adsız dedi ki…
Selam;

OnColumnsort diye bir şey olması gerek.
ve Listview'in de AlphaSort diye bir yordamı.
Bunları bir araştır istersen.

ggumus

Bu blogdaki popüler yayınlar

The O.C.

Arkadaşların evde Cnbc-e olmadığından, eve yolum düştüğü vakitlerde dizinin yayın saatine uymadığından uzun zamandır bu diziyi izleyemedim. En son Ryan kız arkadaşından ayrılmıştı. Daha doğrusu piskopat bi çocuğun oyunlarından dolayı kız Ryanı terk etmişti. Konu hakkında bilgisi olan var mı?