ダウンロード ソースコード (91.5 KB)
DataGridViewのソート機能は通常のオブジェクト配列をそのままバインドしただけでは利用することができません。スマートクライアントで利用されることが多いWebサービスなどで取得できるオブジェクトもオブジェクト配列を利用することが多いので、これでは不便です。本稿ではDataGridViewへバインドしたオブジェクトでソート機能を利用できるようにする手軽な方法を紹介します。
はじめに
WindowsフォームでDataGridViewを利用した一覧表示を実装すると表示項目の幅をユーザーが自由に変更したり、列の入れ替えを行ったり自由に表示をカスタマイズすることができます。また項目を選択してデータをソートすることも可能です。しかしこのソート機能は通常のオブジェクト配列をそのままバインドしただけでは利用することができません。スマートクライアントで利用されることが多いWebサービスなどで取得できるオブジェクトもオブジェクト配列を利用することが多いので、これでは不便です。本稿ではDataGridViewへバインドしたオブジェクトでソート機能を利用できるようにする手軽な方法を紹介します。
サンプルの説明
サンプルは、Webサービスとクライアントプログラムに分かれています。本稿ではWebサービスを作成する手順については割愛させて頂きますが、作成手順についてはマイクロソフトの提供するXML Web サービスの作成とアクセスに関するチュートリアル(msdnライブラリ)のページを参照してください。
Webサービス
サンプルのWebサービスは非常に簡単なものです。Bookクラスの配列を返すGetBookListメソッドを実装したBookServiceクラスを作成しました。
受け渡されるBookクラスはISBN、Title、Author、Priceを属性として持っています。
Imports Microsoft.VisualBasic Public Class Book Public ISBN As String Public Title As String Public Author As String Public Price As Integer End Class
BookServiceのGetBookListメソッドにはWebサービスとして公開するための<WebMethod> 属性を付与しています。本稿では記述を簡潔にするため、一覧を生成するようにコーディングしています。
Imports System.Collections.Generic Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols Public Class BookService Inherits System.Web.Services.WebService <WebMethod()> _ Public Function GetBookList() As Book() Dim book As Book() = New Book(9) {} book(0) = New Book book(0).ISBN = "4-7981-1257-2" book(0).Title = "独習ASP.NET2.0" book(0).Author = "山田祥寛" book(0).Price = 4179 '(中略) Return book End Function End Class
クライアントプログラム
クライアントプログラムとしてSampleFormクラスを作成しました。SampleFormには一覧を表示するDataGridViewと一覧取得のボタンを配置しています。
ボタン押下時にWebサービスへアクセスし、取得したデータをDataGridViewへバインドします。
Public Class SampleForm 'DataSouceに直接バインドした場合 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Me.BookBindingSource.DataSource = Me.BookService1.GetBookList End Sub End Class
- DataGridViewコントロールをFormに配置します。この段階ではまだヘッダーも表示されていません。
- DataGridViewの右上に表示されるスマートタグを開きます。Webサービスへのプロキシクラスを作成済みであれば「データソースの選択>他のデータソース>プロジェクト データソース」にプロキシクラスが表示されますので、そこからバインドするクラスを選択します。ここでは
Bookクラスを選択しています。 - 設定が完了すると選択したクラスのBindingSourceが作成され、DataGridViewにヘッダーが表示されます。表示する項目の選択、編集の可否などもスマートタグから設定できます。
実行例
実行時の画面は次のようになります。

このとき表示された一覧のヘッダをクリックしてもデータはソートすることができません。
この記事は参考になりましたか?
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 奥山 学(オクヤマ マナブ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア



