基本的にはgridView.AllowSorting=Trueに設定して、ソートしたい列のプロパティのSortExpressionを設定する。
するとSortingイベントが発生するので、Sortingイベントハンドラで、指定された順で取得しなおしたデータをgridViewのデータソースに設定しなおしてやる。
ソートした項目は自前で保存しておけば、前回と同じ項目でソートしたとき昇順・降順を切り替えられる。
gridView.RowDataBoundイベントハンドラで、ソートした項目のヘッダを描画するときにCssClassなどを指定すればソートした列を目立たせるような表示ができる。
GridViewのソートをコントロールを使用せずゴリゴリ書いてみる
SqlDataSource を使わず GridView をソート (昇順・降順をAttributesに自前で保存しておいて切り替えを可能にする)
http://surferonwww.info/BlogEngine/post/2018/10/22/sort-gridview-without-using-sqldatasource.aspx
GridViewコントロールのヘッダにソート方向を表示する
http://www.atmarkit.co.jp/fdotnet/dotnettips/956aspgridvwhdrsort/aspgridvwhdrsort.html