SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

WebサービスをバインドしたDataGridViewでソート処理を実装する

ソート機能を実装したBindingListの作り方

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード ソースコード (91.5 KB)

DataGridViewのソート機能は通常のオブジェクト配列をそのままバインドしただけでは利用することができません。スマートクライアントで利用されることが多いWebサービスなどで取得できるオブジェクトもオブジェクト配列を利用することが多いので、これでは不便です。本稿ではDataGridViewへバインドしたオブジェクトでソート機能を利用できるようにする手軽な方法を紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 WindowsフォームでDataGridViewを利用した一覧表示を実装すると表示項目の幅をユーザーが自由に変更したり、列の入れ替えを行ったり自由に表示をカスタマイズすることができます。また項目を選択してデータをソートすることも可能です。しかしこのソート機能は通常のオブジェクト配列をそのままバインドしただけでは利用することができません。スマートクライアントで利用されることが多いWebサービスなどで取得できるオブジェクトもオブジェクト配列を利用することが多いので、これでは不便です。本稿ではDataGridViewへバインドしたオブジェクトでソート機能を利用できるようにする手軽な方法を紹介します。

補足説明
 ASP.NETを利用してXML Webサービスを構築する場合、インターフェイスするデータの型にDataSetを利用することもできます。その場合は今回ご紹介する方法を使わなくともソート機能を利用することも可能です。本稿ではサーバサイドのテクノロジーに制限を受けないようにオブジェクトの配列型でのインターフェイスを想定した場合のソート機能について紹介します。

サンプルの説明

 サンプルは、Webサービスとクライアントプログラムに分かれています。本稿ではWebサービスを作成する手順については割愛させて頂きますが、作成手順についてはマイクロソフトの提供するXML Web サービスの作成とアクセスに関するチュートリアル(msdnライブラリ)のページを参照してください。

Webサービス

 サンプルのWebサービスは非常に簡単なものです。Bookクラスの配列を返すGetBookListメソッドを実装したBookServiceクラスを作成しました。

 受け渡されるBookクラスはISBN、Title、Author、Priceを属性として持っています。

Book.vbの抜粋
Imports Microsoft.VisualBasic

Public Class Book

    Public ISBN As String
    Public Title As String
    Public Author As String
    Public Price As Integer

End Class

 BookServiceGetBookListメソッドにはWebサービスとして公開するための<WebMethod> 属性を付与しています。本稿では記述を簡潔にするため、一覧を生成するようにコーディングしています。

BookService.vbの抜粋
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
補足説明
 本稿ではサンプルコードを簡潔にするため<WebService>属性、<WebServiceBinding>属性は省略しています。省略した場合、これらの属性によって設定できる値にはデフォルト値が設定されます。

クライアントプログラム

 クライアントプログラムとしてSampleFormクラスを作成しました。SampleFormには一覧を表示するDataGridViewと一覧取得のボタンを配置しています。

 ボタン押下時にWebサービスへアクセスし、取得したデータをDataGridViewへバインドします。

Webサービスで取得した一覧を直接バインドするSampleForm.vbの抜粋
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へのWebサービスのバインドは次の手順で行うと簡単に行うことができます。
  1. DataGridViewコントロールをFormに配置します。この段階ではまだヘッダーも表示されていません。
  2. フォームに配置された直後のDataGridViewコントロール
    フォームに配置された直後のDataGridViewコントロール
  3. DataGridViewの右上に表示されるスマートタグを開きます。Webサービスへのプロキシクラスを作成済みであれば「データソースの選択>他のデータソース>プロジェクト データソース」にプロキシクラスが表示されますので、そこからバインドするクラスを選択します。ここではBookクラスを選択しています。
  4. スマートタグを表示したDataGridViewコントロール
    スマートタグを表示したDataGridViewコントロール
  5. 設定が完了すると選択したクラスのBindingSourceが作成され、DataGridViewにヘッダーが表示されます。表示する項目の選択、編集の可否などもスマートタグから設定できます。
  6. ヘッダーが表示されたDataGridViewコントロール
    ヘッダーが表示されたDataGridViewコントロール
 ここまで設定が終われば、上記コーディング例の通り、DataGridViewのDataSouceにオブジェクトを設定するだけで一覧が表示されるようになります。

実行例

 実行時の画面は次のようになります。

サンプルアプリケーションの実行画面
サンプルアプリケーションの実行画面

 このとき表示された一覧のヘッダをクリックしてもデータはソートすることができません。

補足説明
 DataGridViewではソートのモードが用意されていますが、オブジェクト配列の場合はモードを設定してもソートすることはできません。

次のページ
ソート機能を利用するための準備

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 奥山 学(オクヤマ マナブ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1159 2007/04/10 08:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング