How Do I Customize Column Sorting?
This lesson will demonstrate how to customize sorting for columns by handling the SortDataGridColumn message that is sent when the user clicks on a column.
A Data Grid Table
The Data Grid Group Script
In the script for the data grid I added the above handler. SortDataGridColumn is called whenever the dgProps["sort by column"] property is set. This includes when the user clicks on a column header to sort.
The way SortDataGridColumn works is simple. If you pass the message then the data grid will use the default column sorting routines (1). If you don't pass the message then the data grid will not perform any sorting (2) and (3).
I want Line Number to just reverse the current sort so I call ReverseSort which is a built-in data grid helper that reverses whatever the current sort order is(2).
Custom Sort Example
## Place in Data Grid script.
## This example shows how to perform a custom sort of data. This is similar
## to the internal routine that the data grid uses.
on SortDataGridColumn pColumn
## Begin by building a list of lines with two items (tab delimited)
## The first item is the index of each record stored in the data grid.
## The second item is the key you are going to sort on.
put the dgData of me into theDataA
repeat for each key theIndex in theDataA
put theIndex & tab & theDataA[theIndex][pColumn] & cr after theData
delete the last char of theData
set the itemdelimiter to tab
## perform sort. Lookup the current sort direction for this column
## and use that as sort direction
put the dgColumnSortDirection[pColumn] of me into theSortDirection
if theSortDirection is "ascending" then
sort lines of theData ascending by item 2 to -1 of each #
sort lines of theData descending by item 2 to -1 of each
## Rebuild the order of indexes in the data grid
put empty into theIndexSequencing
repeat for each line theLine in theData
put item 1 of theLine & comma after theIndexSequencing
delete the last char of theIndexSequencing
## Set the dgIndexes property to new order
set the dgIndexes of me to theIndexSequencing
## Tell data grid to hilite column