DataGridView:セル内で文字列を折り返して表示する(サンプルあり)

📋 目次(クリックで展開)

DataGridView で住所や備考欄などの長い文字列を表示する際、標準設定のままではセルの横幅を超えた部分が隠れてしまい、末尾が「…」と省略されてしまいます。ユーザーが内容を一目で確認できるようにするには、セルの幅に合わせてテキストを自動的に折り返して表示させる必要があります。

DataGridView で文字列を折り返すには、セルスタイルの設定に加えて、「行の高さ」を文字量に合わせて自動調整する設定をセットで行います。

今回は、特定の列、あるいはグリッド全体で文字列を折り返し、見栄えよく全面表示させるための実装手順について解説します。

文字列を折り返して表示する仕組み

セル内での折り返し表示を実現するには、2つの設定を組み合わせます。

  1. DefaultCellStyle.WrapMode プロパティ セル内のテキストを折り返すかどうかを制御するプロパティです。これを DataGridViewTriState.True に設定することで、文字列がセルの右端に達したときに自動で改行されるようになります。
  2. AutoSizeRowsMode プロパティ WrapMode を有効にしただけでは、行の高さが固定されたままのため、折り返された2行目以降が下に隠れて見えなくなってしまいます。グリッド全体の AutoSizeRowsModeAllCells(または DisplayedCells)に設定することで、折り返された文字量に応じて行の高さが自動的に拡張されます。

実装コード

以下は、DataTable をデータソースとしてバインドし、「Description(備考)」の列において文字列の折り返しを有効化し、行の高さを自動追従させるコード例です。

Form1.cs

Form1.cs
using System.Data;
namespace DataGridView_WrapText
{
public partial class Form1 : Form
{
private DataTable _dataTable = new DataTable();
public Form1()
{
InitializeComponent();
InitializeDataGridView();
}
private void InitializeDataGridView()
{
// テスト用データの準備(備考欄に長い文字列を設定)
_dataTable.Columns.Add("Code", typeof(string));
_dataTable.Columns.Add("Name", typeof(string));
_dataTable.Columns.Add("Description", typeof(string));
_dataTable.Rows.Add("P001", "ノートパソコン", "最新世代のCPUと大容量メモリを搭載した、ビジネス向けの軽量薄型高性能ノートPCです。");
_dataTable.Rows.Add("P002", "USBメモリ", "高速データ転送に対応したUSB 3.2 Gen1対応のコンパクトなフラッシュメモリ(64GBモデル)です。");
dataGridView1.DataSource = _dataTable;
// 1. 特定の列(Description列)だけで文字列の折り返しを有効にする場合
if (dataGridView1.Columns["Description"] != null)
{
dataGridView1.Columns["Description"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
}
// ※もし、すべての列で一括して折り返したい場合は、以下のグリッド全体の設定を使用します
// dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
// 2. 文字量に合わせて行の高さを自動的に調整する設定
// これを忘れると、折り返された2行目以降がセルの下に隠れて見えなくなります
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
// 見やすさのための列幅調整
dataGridView1.Columns["Code"].Width = 60;
dataGridView1.Columns["Name"].Width = 120;
}
}
}

サンプルアプリケーション

DataGridView_WrapText.zip
※ サンプルアプリケーションは、.NET 10 をターゲットに作成しています。

実行結果

列幅に対して長い文字列は、折り返して改行されていることが分かります。

留意すべき注意点と実装の背景

セルの折り返し表示を実務で安定して動作させるため、パフォーマンスとUIデザインの観点から把握しておくとよい点が2つあります。

大量データ表示時のパフォーマンスへの影響

行の高さを自動計算する AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells は非常に便利な機能ですが、データ件数が数千件、数万件と大量にある環境では注意が必要です。

画面が表示される際、あるいは列の幅が変更されるたびに、DataGridView は全行の文字量をスキャンして高さを再計算するため、処理に負荷がかかり画面のスクロールがカクつく原因になります。

もし大量のデータを扱い、かつ折り返し表示を行いたい場合は、以下の対策が有効です。

  • 表示範囲のみを計算対象にする AllCells(全行を計算)の代わりに DataGridViewAutoSizeRowsMode.DisplayedCells(現在画面に見えている行のみを計算)に設定することで、データ件数が多くても負荷を最小限に抑えられます。
  • 手動のタイミングで計算させる 自動調整機能はオフ(None)にしておき、データ読み込み完了時などの特定のタイミングで一度だけ dataGridView1.AutoResizeRows() メソッドをコードから呼び出し、高さを手動で一括調整します。

セル内の余白(Padding)の調整

文字を折り返して行高さを自動調整すると、セルの上下の枠線ギリギリまで文字が詰まって表示されるため、少し窮屈な印象を与えるデザインになりがちです。

視認性をさらに向上させたい場合は、スタイル設定でセル内に少し余白(パディング)を持たせるのがおすすめです。

// セル内の上下左右に 4ピクセルの余白を設ける例
dataGridView1.DefaultCellStyle.Padding = new Padding(4);

余白を設定した状態で AutoSizeRowsMode を有効にすれば、余白分の高さも考慮されて行高さが自動計算されるため、スッキリとした読みやすいレイアウトに仕上がります。

まとめ

今回は、DataGridView のセル内で文字列を折り返して表示する方法について解説しました。

標準では見切れてしまう長文データも、セルスタイルの変更と行高さの自動追従を組み合わせることで、綺麗にグリッド内に収めることができます。

  • DefaultCellStyle.WrapModeTrue にして自動改行を有効にする
  • 改行された文字が隠れないよう、AutoSizeRowsMode で行高さを自動調整する
  • 大量データによる遅延を防ぐため、要件に応じて DisplayedCells の利用や手動リサイズ(AutoResizeRows)を検討する

住所録や業務システムのログ表示、コメント欄など、長文が混入しやすいグリッド画面を最適化する際の参考になりましたら幸いです。


💬 コメント