|
.NET TIPS [ADO.NET]データテーブル(DataTable)内のレコードをソートするには?デジタルアドバンテージ 遠藤 孝信2005/10/14 |
![]() |
|
|
|
データテーブル*は、メモリ上において(主にデータベースの)テーブルを表すためのオブジェクトである。一般的にデータテーブルは、データベースから取得したレコード(行データ)を保持するのに使われる。
データテーブルのレコードをソート(並べ替え)したい場合には、データベースからレコードを取得するときに発行するSQL文(SELECT文)でソート条件を指定すれば、データテーブル内のレコードはソートされた状態となる。
しかし、複数の検索結果を1つのデータテーブルにマージした場合や、データベース以外のデータソースからデータテーブルを作成した場合などにもレコードをソートしたいなら、データテーブル上でソートを行う必要がある。本稿ではこの方法について解説する。
| * DataTableクラス(System.Data名前空間)のオブジェクト。詳細については「ADO.NET基礎講座:第4回 データセットを使ったデータベース・アクセス」を参照。 |
データビューを利用したデータテーブルのソート
データテーブル自体にはソート機能が用意されていない。このためデータテーブルをソートするには、まず空のデータテーブルを作成し、そこにソート済みのレコードを順に挿入していくことになる。
レコードのソートについては、データビュー(DataViewクラス(System.Data名前空間)のオブジェクト)を利用して、ソートされたデータテーブルの「ビュー」を作成すればよい。
具体的には次図のような手順によりデータテーブルをソートすることができる。
![]() |
|||||||||
| データテーブルのソート手順 | |||||||||
|
のデータテーブルのコピーについては、DataTableクラスのCloneメソッドにより行える。このメソッドは、新しいデータテーブルのインスタンスを作成し、元のデータテーブルの構造のみをコピーする。
また、
のレコードのコピーについては、DataTableクラスのImportRowメソッドが利用できる。データビューの各レコードは、レコードのビューであるDataRowViewオブジェクト(System.Data名前空間)として扱われるが、そのRowプロパティにより、元のデータテーブルにあるレコードであるDataRowオブジェクト(System.Data名前空間)にアクセスできる。
データテーブルをソートするサンプル・プログラム
次のサンプル・プログラムは実際にデータテーブルを作成し、ソートを行っている例だ。
このプログラムでは、@ITのRSS情報を読み取ってデータテーブルを作成している。このRSS情報の読み取りについては「TIPS:[ASP.NET]DataGridコントロールでデータセットを表示するには?」の後半部分で解説しているので、そちらを参照していただきたい。
|
|
| データテーブルをソートするC#のサンプル・プログラム(dtsort.cs) | |
|
|
| データテーブルをソートするVB.NETのサンプル・プログラム(dtsort.vb) | |
プログラムでは、元のデータテーブル、Cloneメソッドにより作成したデータテーブル、そしてソートされたレコードを含むデータテーブルの内容を表示している。ここでは日付の列(列名「data」)でソートを行っており、もともと降順でソートされていたレコードが昇順でソートされたのが分かる。
なお、本稿はあくまでデータテーブル内のレコードのソート方法について述べたものであり、ソートされたレコードをDataGridコントロールなどに表示したいだけであれば、ソートされたデータビューをコントロールに連結するだけでよい(参考「.NET TIPS:DataGridコントロールで並び替え順やフィルタを指定するには?」)。![]()
| カテゴリ:データベース 処理対象:データテーブル 使用ライブラリ:DataTableクラス(System.Data名前空間) 使用ライブラリ:DataViewクラス(System.Data名前空間) 使用ライブラリ:DataRowViewクラス(System.Data名前空間) 関連TIPS:[ASP.NET]DataGridコントロールでデータセットを表示するには? 関連TIPS:DataGridコントロールで並び替え順やフィルタを指定するには? |
| 「.NET TIPS」 |
ホワイトペーパー(TechTargetジャパン)
- LocalConnection APIと動的なスタイリング (2010/2/9)
Webページ上の複数のSilverlightアプリ間でメッセージ通信をする方法とは? コントロールの見た目を動的に設定する方法とは? - ASP.NET MVC 2:モデルの検証 (2010/2/8)
ASP.NET MVC 2で導入される入力検証機能を使った実装を紹介。シンプルな属性の追加によるエレガントな実装が可能となっている - ASP.NETによる3階層Webアプリ「ITブック」構築 (2010/2/5)
ちょっとした改造で、あなたのWebアプリは劇的に使いやすく、かっこよくなる。まずは元となるWebアプリを標準的手法で構築 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/2/4)
− カスタムMVCビューエンジンを利用するには?(活用編)
− フォーム全体へのドッキングでつまみを表示するには?
− リストボックスでTextBlockの文字列を折り返すには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |








