【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

.NET TIPS

DataGridコントロールで列の幅を指定するには?

デジタルアドバンテージ
2003/12/12

 DataGridコントロールでデータを表示するとき、文字列が列からはみ出してしまい、文字列の一部分しか見えていなかったり、余白が空きすぎて見栄えが良くなかったりする場合がある。

DataGridコントロールによるデータの一覧表示
DataGridコントロールで、文字列が列からはみ出したり、列に余白があったりするので、データが見づらい場合がある。
  文字列が列からはみ出している。本来なら「パイナップル」と表示されるところが、列幅が足りないので、「パイナッ」(一部分)までしか表示されていない。
  余白が空きすぎている。次の列までの余白が空きすぎているので、見栄えが悪い。

 このような場合、DataGridコントロールにあらかじめ最適な列幅を指定しておくとよい。

列幅を指定したDataGridコントロール
文字列が列内に適切に収まっていおり、無駄な余白もないので、データが見やすい。
  列幅が大きくなっているので、文字列が完全に列内に収まっている。
  列幅が小さくなっているので、無駄な余白がない。

 上の図のように、DataGridコントロールで、列の幅を指定するには、DataGridTextBoxColumnクラス(System.Windows.Forms名前空間)のWidthプロパティにピクセル単位で幅を設定する。

 なお、この列幅をDataGridコントロールに適用するには、まず、列の幅を指定したDataGridTextBoxColumnオブジェクトを、DataGridTableStyleクラスのオブジェクトのGridColumnStylesプロパティにAddメソッドを使って追加する。このGridColumnStylesプロパティは、DataGridコントロールの列のスタイルを指定するためのコレクションである。次に、そのDataGridTableStyleオブジェクトを、DataGridコントロールのテーブル・スタイルのコレクションであるTableStylesプロパティにAddメソッドにより追加する。次に具体的なコードを示す。

private void Form1_Load(object sender, System.EventArgs e)
{
  // テーブルを作成
  DataSet dataSet1 = new DataSet("商品マスター");
  DataTable dataTable1  = dataSet1.Tables.Add("商品テーブル");
  DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int));
  DataColumn dataClumn2 = dataTable1.Columns.Add("商品");
  DataColumn dataClumn3 = dataTable1.Columns.Add("個数", typeof(int));

  // テーブルのスタイルを作成
  DataGridTableStyle dgTableStyle = new DataGridTableStyle();
  dgTableStyle.MappingName = dataTable1.TableName;
  dataGrid1.TableStyles.Add(dgTableStyle);


  // テーブルの列のスタイルを作成
  DataGridTextBoxColumn dgColumnStyle1 = new DataGridTextBoxColumn();
  DataGridTextBoxColumn dgColumnStyle2 = new DataGridTextBoxColumn();
  DataGridTextBoxColumn dgColumnStyle3 = new DataGridTextBoxColumn();
  dgColumnStyle1.MappingName = dataClumn1.ColumnName;
  dgColumnStyle2.MappingName = dataClumn2.ColumnName;
  dgColumnStyle3.MappingName = dataClumn3.ColumnName;
  // *** 列の幅を決定 ***
  dgColumnStyle1.Width = 30;
  dgColumnStyle2.Width = 100;
  dgColumnStyle3.Width = 50;
  // 列のスタイルをテーブル・スタイルに登録
  dgTableStyle.GridColumnStyles.Add(dgColumnStyle1);
  dgTableStyle.GridColumnStyles.Add(dgColumnStyle2);
  dgTableStyle.GridColumnStyles.Add(dgColumnStyle3);


  // テーブルにデータを追加
  dataTable1.Rows.Add(new Object[] {1, "みかん", 100});
  dataTable1.Rows.Add(new Object[] {2, "パイナップル", 300});
  dataTable1.Rows.Add(new Object[] {3, "バナナ", 120});
  dataTable1.Rows.Add(new Object[] {4, "すいか", 280});
  dataTable1.Rows.Add(new Object[] {5, "いちご", 200});
  dataTable1.Rows.Add(new Object[] {6, "メロン", 150});

  // データグリッドにテーブルを表示する
  dataGrid1.SetDataBinding(dataSet1, dataTable1.TableName);
}
DataGridコントロールの列(Column)の幅を指定するC#のプログラム

 なお今回のTIPSは、データ内の文字列の長さが予測可能な場合には有効だが、文字列の長さが不定な場合はあらかじめ幅を決定できないので、あまり有効ではない。そのような場合、Graphicsクラス(System.Drawing名前空間)のMeasureStringメソッドなどを使って、データ内の文字列の最大幅を取得し、列幅を動的に決定する必要があるだろう。End of Article

カテゴリ:Windowsフォーム 処理対象:DataGridコントロール
使用ライブラリ:DataGridコントロール
使用ライブラリ:DataGridTextBoxColumnクラス(System.Windows.Forms名前空間)
使用ライブラリ:DataGridTableStyleクラス(System.Windows.Forms名前空間)
使用ライブラリ:Graphicsクラス(System.Drawing名前空間)
 
この記事と関連性の高い別の.NET TIPS
数値を右詰めや0埋めで文字列化するには?
文字列の長さを取得するには?
[ASP.NET]DataGridコントロールで特定の行や文字を強調するには?
文字列に特定の文字列が含まれているかを調べるには?(Contains編)
文字と文字列を変換するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?