SqlDatasourceがバインドされていないGridViewのソート
キャストはTMDbのAPIから取得した情報をDataTableに展開し、DataListやGridViewにバインドしている。GridViewのデータソースが、DataTableの場合、GridView.Sort メソッド (System.Web.UI.WebControls)の方法ではソートできない。Rows.AddでDataTable へ追加した順に表示される。
今回はDataTableに展開した列「Order」の値により、ページ表示時に(主役が最初にくるように)昇順でソートされた状態にしたい。特にソート項目を変更するとか、昇順・降順を入れ替えることは必要ない。
なお、SqlDatasourceがバインドされたGridViewの場合は、SELECTコマンドでソートしておけば、そのとおりにソートされた状態で初期表示される。
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
手順
-
DataTableのクローンを作る
-
DataViewを作る
-
Dataviewのソート項目を列「Order」に設定する
-
DataViewからDataTableのクローンへデータをコピーする
-
DataTableのクローンをDataListとGridViewのデータソース設定する
すると、列「Order」でソートされる。DataListも同様。なお、列OrderはTMDbではIntである。そのままだと1、10,11・・・2、というようにソートされてしまうので、桁を3ケタに合わせた。
参考
[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
コメント
コメントを投稿