SqlDatasourceがバインドされていないGridViewのソート

キャストはTMDbのAPIから取得した情報をDataTableに展開し、DataListやGridViewにバインドしている。GridViewのデータソースが、DataTableの場合、GridView.Sort メソッド (System.Web.UI.WebControls)の方法ではソートできない。Rows.AddでDataTable へ追加した順に表示される。

列「Order」でソートされていない。
21

今回はDataTableに展開した列「Order」の値により、ページ表示時に(主役が最初にくるように)昇順でソートされた状態にしたい。特にソート項目を変更するとか、昇順・降順を入れ替えることは必要ない。

なお、SqlDatasourceがバインドされたGridViewの場合は、SELECTコマンドでソートしておけば、そのとおりにソートされた状態で初期表示される。

 

サンプル
Dim tableCastClone As DataTable = tableCast.Clone()
Dim dvCast As DataView = New DataView(tableCast)
dvCast.Sort = "Order"
For Each drvCast As DataRowView In dvCast
    tableCastClone.ImportRow(drvCast.Row)
Next

GVCast.DataSource = tableCastClone
DataListCast.DataSource = tableCastClone

手順

  1. DataTableのクローンを作る

  2. DataViewを作る

  3. Dataviewのソート項目を列「Order」に設定する

  4. DataViewからDataTableのクローンへデータをコピーする

  5. DataTableのクローンをDataListとGridViewのデータソース設定する

すると、列「Order」でソートされる。DataListも同様。なお、列OrderはTMDbではIntである。そのままだと1、10,11・・・2、というようにソートされてしまうので、桁を3ケタに合わせた。

22

参考

[ADO.NET]データテーブル(DataTable)内のレコードをソートするには? - @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/363dtsort/dtsort.html

または下記の方法でもよさそう。

GridView.Sorting イベント (System.Web.UI.WebControls)
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.sorting(v=vs.100).aspx

コメント

このブログの人気の投稿

エアコン室外機のフロンガス銅管を覆うカバーを交換しました

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

IKEAの鏡を壁に取り付ける