What actually happens internally when the user clicks a column header in a DataGridView? More specifically, if the first click sorts data ascending, how does it sort descending with the next click? Does it just negate the Compare() or CompareTo() result? And which interface does DataGridView use to sort items?