DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewのセルに複数行のテキストを入力できるようにする

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

こちらで紹介したように、セルスタイル(DataGridViewCellStyleオブジェクト)のDataGridViewCellStyle.WrapModeプロパティをDataGridViewTriState.Trueにすることで、改行文字を含む複数行テキストの表示と、入力が可能になります。

WrapModeプロパティがTrueの時にセルの編集で改行を行うには、Shiftキーを押しながらEnterキーを押します。

VB.NET
コードを隠すコードを選択
'セルの内容に合わせて、行の高さが自動的に調節されるようにする
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells

'"Column1"列のセルのテキストを折り返して表示する
DataGridView1.Columns("Column1").DefaultCellStyle.WrapMode = _
    DataGridViewTriState.True
C#
コードを隠すコードを選択
//セルの内容に合わせて、行の高さが自動的に調節されるようにする
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

//"Column1"列のセルのテキストを折り返して表示する
DataGridView1.Columns["Column1"].DefaultCellStyle.WrapMode =
    DataGridViewTriState.True;

垂直スクロールバーを表示する

複数行テキストの入力時に垂直スクロールバーを表示するには、こちらで紹介している方法でテキストボックスのScrollBarsプロパティを変更します。ただし、このままではスクロールバーがおかしな位置に表示されてしまうことがあります。そのような場合は、こちらで紹介したように、セルスタイルのAlignmentプロパティをTopLeftにして、セルの内容が左上に表示されるようにすればよいでしょう。

VB.NET
コードを隠すコードを選択
'EditingControlShowingイベントハンドラ
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
    '表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
    If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
        Dim dgv As DataGridView = CType(sender, DataGridView)

        '編集のために表示されているコントロールを取得
        Dim tb As DataGridViewTextBoxEditingControl = _
            CType(e.Control, DataGridViewTextBoxEditingControl)
        '垂直バーを表示する
        tb.ScrollBars = ScrollBars.Vertical
    End If
End Sub
C#
コードを隠すコードを選択
//EditingControlShowingイベントハンドラ
private void DataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    //表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
    if (e.Control is DataGridViewTextBoxEditingControl)
    {
        DataGridView dgv = (DataGridView)sender;

        //編集のために表示されているコントロールを取得
        DataGridViewTextBoxEditingControl tb =
            (DataGridViewTextBoxEditingControl)e.Control;
        //垂直バーを表示する
        tb.ScrollBars = ScrollBars.Vertical;
    }
}
  • 履歴:
  • 2016/5/27 DataGridView.AutoSizeRowsModeメソッドを追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。