Rob and guys,
Rob,
Here is the solution, I had the code writen when I asked the question,
what I was missing was doing wrong was using this declaration:
TListViewItemComparer = Class(IComparer)
Which should really be:
TListViewItemComparer = Class(TObject, IComparer)
Here is the full code if some one needs it:
unit ListViewComparerClass;
(*
Things to do:
TWinFormMain = class(System.Windows.Forms.Form)
......
Private
ListViewItemComparer: TListViewItemComparer;
....
End;
constructor TWinFormMain.Create;
Begin
.....
ListViewItemComparer := TListViewItemComparer.Create;
Self.ListViewAddressManager.ListViewItemSorter :=
ListViewItemComparer;
....
End;
{========================================================================
======}
procedure TWinFormMain.ListViewAddressManager_ColumnClick(sender:
System.Object; e: System.Windows.Forms.ColumnClickEventArgs);
{========================================================================
======}
begin
If (e.Column = ListViewItemComparer.SortColumn) Then
Begin
If (ListViewItemComparer.SortOrder = SortOrder.Ascending) Then
Begin
ListViewItemComparer.SortOrder := SortOrder.Descending;
End
Else
Begin
ListViewItemComparer.SortOrder := SortOrder.Ascending;
End;
End
Else
Begin
ListViewItemComparer.SortColumn := e.Column;
ListViewItemComparer.SortOrder := SortOrder.Ascending;
End;
ListViewAddressManager.Sort;
end;
*)
interface
Uses
System.Drawing, System.Collections, System.ComponentModel,
System.Reflection,
System.Windows.Forms, System.Data, System.Resources, System.IO;
Type
TListViewItemComparer = Class(TObject, IComparer)
Private
fColumnToSort: Integer;
fOrderOfSort: SortOrder;
ObjectCompare: CaseInsensitiveComparer;
Protected
Public
Property SortColumn: Integer Read fColumnToSort Write fColumnToSort;
Property SortOrder: System.Windows.Forms.SortOrder Read
fOrderOfSort Write fOrderOfSort;
Constructor Create;
//Destructor Free;
Function Compare(x, y: TObject): Integer;
End;
implementation
{========================================================================
======}
Constructor TListViewItemComparer.Create;
{========================================================================
======}
Begin
Inherited Create;
fColumnToSort := 0;
fOrderOfSort := System.Windows.Forms.SortOrder.None;
ObjectCompare := CaseInsensitiveComparer.Create;
End;
{========================================================================
======}
Function TListViewItemComparer.Compare(x, y: TObject): Integer;
{========================================================================
======}
Var
listviewX, listviewY: ListViewItem;
iCompareResult: Integer;
Begin
listviewX := ListViewItem(x);
listviewY := ListViewItem(y);
iCompareResult :=
ObjectCompare.Compare(listviewX.SubItems[fColumnToSort].Text,
listviewY.SubItems[fColumnToSort].Text);
If (fOrderOfSort = System.Windows.Forms.SortOrder.Ascending) Then
Begin
Result := iCompareResult
End
Else
Begin
If (fOrderOfSort = System.Windows.Forms.SortOrder.Descending) Then
Begin
Result := (iCompareResult * -1);
End
Else
Begin
Result := 0;
End;
End;
End;
end.
Bjarne \v/
Bjarne's Virtual Office at http://www.go2nts.com/bwtoday.html
------------------------------
Message: 7
Date: Mon, 09 Jan 2006 14:19:10 -0600
From: Rob Kennedy <[EMAIL PROTECTED]>
Subject: Re: ListView Column sort under Delphi Dot Not (2005 or 2006)
To: "Borland's Delphi Discussion List" <[email protected]>
Message-ID: <[EMAIL PROTECTED]>
Content-Type: text/plain; charset=UTF-8; format=flowed
[EMAIL PROTECTED] wrote:
> I am using the ListView on a form and I want to sort the columns.
You
> can do that by creating a ListViewItemCompare class driven from the
> IComparer interface. However when I try to do so in Delphi Dot Net I
> get and error that it does not know what the IComparer is. Do you
know
> how to do this in Delphi Dot Net?
It looks like you should use the ListView object's ListViewItemSorter
property, in conjunction with the Sort property. ListViewItemSorter is
a
System.Collections.IComparer, which has a Compare method that takes two
Objects and returns an Integer.
Write any class you want, and make sure it implements the IComparer
interface. Then assign an instance of that class to the
ListViewItemSorter property.
--
Rob
_______________________________________________
Delphi mailing list -> [email protected]
http://www.elists.org/mailman/listinfo/delphi