SHOEISHA iD

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

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

japan.internet.com翻訳記事

DataGridViewのカスタム列タイプの作成

DataGridViewのセル内にグラフを描画する

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

ダウンロード サンプルソース (56.0 KB)

DataGridViewコントロールのカスタム列タイプ作成は以前よりずっと簡単になっています。

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

はじめに

 私のところには、プログラミングに関するさまざまな質問が電子メールで送られてきます。できる限りすべての問題を解決するように努力していますが、ランダムな質問の多くはパブリックニュースグループの方へ回しています。それでも、自分で調べずにはいられない興味深い質問もあります。先日も、友人から次のようなメールが届きました。

 「Webページに表形式で値を表示しているんだ。そのうちの1つの列に、表中の値に基づくシンプルな小さい横棒グラフを表示している。この横棒グラフは単色のビットマップで、グラフの長さはフィールドの値を示している。このグラフの横にはフィールド値も表示している。単純な表にこういう視覚情報を加えるのはすごく効果的だと思うんだ。これをDataGridViewコントロールで行うにはどうすればいいかな?」

 私の予想に反して、少し調べてみると、DataGridViewに新しい列タイプを作成すればこれを実現できることがわかりました。Visual Studio 2003のGridViewコントロールで非常に苦労した経験から、初めは不安でした。ところが、.NETの世界ではよくあるように、以前は難しかったこの処理も今は簡単に実現できることがわかりました。私はすぐにサンプルを作成して友人へ送りました。今回は、それにもう少し手を加えたものを紹介します。

 この記事では、DataGridViewコントロールのカスタム列タイプの作成方法を説明するために、横棒グラフを表示するセルタイプのサンプルを見ていきます。このサンプルの作成方法を習得すれば、今度はもっと複雑な列タイプも作成できるようになるでしょう。

 以降では、図1のフォームのようなサンプルを作成します。このフォームには、SQL Server 2000 Northwindサンプルデータベースのデータを使用していますが、他のテーブルを使って作ってみることもできます。ただ、整数列が含まれるデータソースを使用してください。また、横棒グラフの長さは、セルの境界内に収まるように調整されます(個々の長さは列の最大値に基づいて決定します)。列幅を広げると、横棒グラフの長さも列幅に合わせて長くなります。図2は、このサンプルの列の動作を示すため、同じ列を3種類の列幅で表示したものです。

図1 完成したフォーム。列の1つに、単なる数字の代わりに横棒グラフが表示されている
図1 完成したフォーム。列の1つに、単なる数字の代わりに横棒グラフが表示されている
図2 同じ列を3種類の列幅で表示した様子
図2 同じ列を3種類の列幅で表示した様子

 DataGridViewのカスタム列タイプ作成の基本概念は単純です。DataGridViewCellクラスを継承する独自のセルクラス(またはDataGridViewCellクラスを継承するクラスを継承するクラス)を作成します。このセルクラスでは、基本クラスの多数のプロテクトメンバをオーバーライドできます。たとえば、この記事のサンプルのようにセルの内容の描画方法を変更する場合は、クラスのPaintメソッドをオーバーライドします。

 セルクラスを作成したら、次はDataGridViewColumnクラスを継承するクラスを作成します。このクラスでも多くのメンバをオーバーライドできますが、通常、その必要はありません。必要なのは、このクラスのコンストラクタ内でCellTemplateプロパティを設定することだけです。最後に、DataGridViewの設定で、目的の列に新しい列タイプを指定すれば完了です(かつては、GridViewの中にComboBoxコントロールを表示する列を作成するには何百行ものコードを書かなければなりませんでした。辛抱強く待った甲斐があるというものです)。

編集部注
 本稿は、『CoDe Magazine』2007年7月/8月号に掲載された記事を、承諾を得て転載したものです。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
サンプルの作成

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

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

Ken Getz(Ken Getz)

MCW Technologies社上級顧問。プログラミング、執筆、教育に携わる。専門はVisual Studio .NETおよびVisual Basicでのツール/アプリケーション開発。『CoDe Magazine』誌の好評コラム「.Finalize()」を担当。共著にベストセラーとなった『Acce...

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング