TListViewOnColumnClick (C++)

From RAD Studio Code Examples
Jump to: navigation, search


This example shows how to use the OnColumnClick and OnCompare events of a list view to let users sort the columns in a report-style list view by clicking the column headers. This requires a global variable to keep track of the column that was clicked. The OnColumnClick event handler sets the global variable that indicates the column to sort and calls AlphaSort.


__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
  TListItem *Item;
  TListColumn *Column;
  const char imagenames[3][20] = {
    "C++ Image", "Borland Image", "Delphi Image"};
  const char Col2Array[3][40] = {
    "Documentation for the C++ icon.", 
    "Borland icon.", "Delphi icon."
  // Create a ListView item for each image in the ImageList.
  ListView1->SmallImages = ImageList1;
  ListView1->LargeImages = ImageList1;
  for (int i = 0; i < ImageList1->Count; i++)
	Item = ListView1->Items->Add();
	Item->Caption = imagenames[i];
	Item->ImageIndex = i;
  // Create two columns to show during viewing as vsReport.
  Column = ListView1->Columns->Add();
  Column->Caption = "Column 1";
  Column->Width = 200;
  Column = ListView1->Columns->Add();
  Column->Caption = "Column 2";
  Column->Width = 200;
  ListView1->ViewStyle = vsReport;

int ColumnToSort = 0;

The OnColumnClick event handler sets the global variable 
to indicate the column to sort and calls AlphaSort.

void __fastcall TForm1::ListView1ColumnClick(TObject *Sender,
	  TListColumn *Column)
  ColumnToSort = Column->Index;
  dynamic_cast<TCustomListView *>(Sender)->AlphaSort();

The OnCompare event handler causes the list view 
to sort on the selected column.

void __fastcall TForm1::ListView1Compare(TObject *Sender, TListItem *Item1,
      TListItem *Item2, int Data, int &Compare)
  if (ColumnToSort == 0)
    Compare = CompareText(Item1->Caption,Item2->Caption);
	int ix = ColumnToSort - 1;
    Compare = 
      CompareText(Item1->SubItems->Strings[ix], Item2->SubItems->Strings[ix]);