Has anyone figured out the process to sort a listview (3 column) in Visual COBOL?
#VisualCOBOL
#ListView
#VisualStudio
Has anyone figured out the process to sort a listview (3 column) in Visual COBOL?
Has anyone figured out the process to sort a listview (3 column) in Visual COBOL?
I am attaching an example that supports sorting of ListView Columns by implementing the IComparer Interface for the Sort method.
When the column is clicked once it will be sorted in ascending Order. If it is clicked again it will sorted in descending order etc.
Form1 code:
class-id testlistsort.Form1 is partial
inherits type System.Windows.Forms.Form.
working-storage section.
01 lvwColumnSorter type testlistsort.ListViewColumnSorter.
method-id NEW.
procedure division.
invoke self::InitializeComponent
*> Create an instance of a ListView column sorter and assign it
*> to the ListView control.
set lvwColumnSorter to new testlistsort.ListViewColumnSorter
set listView1::ListViewItemSorter to lvwColumnSorter
goback.
end method.
method-id Form1_Load final private.
01 row type ListViewItem.
procedure division using by value sender as object e as type System.EventArgs.
set row to new ListViewItem("John Smith")
invoke row::SubItems::Add("ABC Software")
invoke row::SubItems::Add("800-555-1234")
invoke listView1::Items::Add(row)
set row to new ListViewItem("Ann Johnson")
invoke row::SubItems::Add("Z-Systems Data")
invoke row::SubItems::Add("111-222-3333")
invoke listView1::Items::Add(row)
set row to new ListViewItem("Zachary Jones")
invoke row::SubItems::Add("New Life Systems")
invoke row::SubItems::Add("555-987-1111")
invoke listView1::Items::Add(row)
*> sets second row in listview to be selected row as indexes are 0 based.
set listView1::Items[1]::Selected to true
goback
end method.
method-id listView1_ColumnClick final private.
procedure division using by value sender as object e as type System.Windows.Forms.ColumnClickEventArgs.
*> Determine if clicked column is already the column that is being sorted.
if e::Column = lvwColumnSorter::SortColumn
*> Reverse the current sort direction for this column.
if lvwColumnSorter::Order = type SortOrder::Ascending
set lvwColumnSorter::Order to type SortOrder::Descending
else
set lvwColumnSorter::Order to type SortOrder::Ascending
end-if
else
*> Set the column number that is to be sorted; default to ascending.
set lvwColumnSorter::SortColumn to e::Column
set lvwColumnSorter::Order to type SortOrder::Ascending
end-if
*> Perform the sort with these new sort options.
invoke listView1::Sort
goback
end method.
method-id button1_Click final private.
procedure division using by value sender as object e as type System.EventArgs.
invoke self::Close
end method.
end class.
ListViewColumSorter Class:
*>
*> This class is an implementation of the 'IComparer' interface.
*>
$set ilusing"System.Collections"
$set ilusing"System.Windows.Forms"
class-id testlistsort.ListViewColumnSorter implements type IComparer.
working-storage section.
01 ColumnToSort binary-long.
01 OrderOfSort type SortOrder.
01 ObjectCompare type CaseInsensitiveComparer.
property-id SortColumn binary-long.
getter.
set property-value to ColumnToSort
setter.
set ColumnToSort to property-value
end property.
property-id Order type SortOrder.
getter.
set property-value to OrderOfSort
setter.
set OrderOfSort to property-value
end property.
method-id New.
local-storage section.
procedure division.
*> Initialize the column to '0'
set ColumnToSort to 0
*> Initialize the sort order to 'none'
set OrderOfSort to type SortOrder::None
*> Initialize the CaseInsensitiveComparer object
set ObjectCompare to new CaseInsensitiveComparer
goback.
end method.
*> Automatically inserted Methods from System.Collections.IComparer
*> This method is inherited from the IComparer interface. It compares the two objects passed using a case insensitive comparison.
method-id Compare.
01 compareResult binary-long.
01 listViewX type ListViewItem.
01 listViewY type ListViewItem.
procedure division using by value #x as object #y as object returning return-item as binary-long.
*> Cast the objects to be compared to ListViewItem objects
set listViewX to #x as type ListViewItem
set listviewY to #y as type ListViewItem
*> Compare the two items
set compareResult to ObjectCompare::Compare(listviewX::SubItems[ColumnToSort]::Text,
listviewY::SubItems[ColumnToSort]::Text)
*> Calculate correct return value based on object comparison
if OrderOfSort = type SortOrder::Ascending
*> Ascending sort is selected, return normal result of compare operation
set return-item to compareResult
else
if OrderOfSort = type SortOrder::Descending
*> Descending sort is selected, return negative result of compare operation
compute return-item = compareResult * -1
else
*> Return '0' to indicate they are equal
set return-item to 0
end-if
end-if
goback
end method.
end class.
Has anyone figured out the process to sort a listview (3 column) in Visual COBOL?
Works....of course.
Has anyone figured out the process to sort a listview (3 column) in Visual COBOL?
Works....of course.
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.