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
I am going to customize when happens when this table is sorted by the Line Number column.
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).
Clicking on the Line Number column now reverses the sort.
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 end repeat 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 # else sort lines of theData descending by item 2 to -1 of each end if ## 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 end repeat 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 HiliteAndStoreSortByColumn pColumn end SortDataGridColumn