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

ユーザーがDataGridViewのセルに入力した値をセルの値に変換する方法を変更する

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

ユーザーがセルに入力した値をそのままセルの値にするのではなく、何らかの加工を施したものをセルの値にしたいという場合があるでしょう。または、ユーザーが入力した値をセルの値に変換する方法を、通常の方法ではなく、特別な方法により変換したいという場合もあるでしょう。そのような時には、DataGridView.CellParsingイベントを使用します。

例えば、"Column1"列のセルに入力された文字列を大文字にした値がセルの値となるようにするには、次のようにします。

VB.NET
コードを隠すコードを選択
'CellParsingイベントハンドラ
Private Sub DataGridView1_CellParsing(ByVal sender As Object, _
        ByVal e As DataGridViewCellParsingEventArgs) _
        Handles DataGridView1.CellParsing
    Dim dgv As DataGridView = CType(sender, DataGridView)

    'セルの列と型を調べる
    If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _
            e.DesiredType Is GetType(String) Then
        '大文字にした値をセルの値とする
        e.Value = e.Value.ToString().ToUpper()
        '解析が不要であることを知らせる
        e.ParsingApplied = True
    End If
End Sub
C#
コードを隠すコードを選択
//CellParsingイベントハンドラ
private void DataGridView1_CellParsing(object sender,
    DataGridViewCellParsingEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;

    //セルの列と型を調べる
    if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&
        e.DesiredType == typeof(string))
    {
        //大文字にした値をセルの値とする
        e.Value = e.Value.ToString().ToUpper();
        //解析が不要であることを知らせる
        e.ParsingApplied = true;
    }
}

CellParsingイベントハンドラに渡されるDataGridViewCellParsingEventArgsオブジェクトのValueプロパティには、ユーザーが入力した値が格納されています。Valueプロパティに実際にセルの値とする値を代入した後は、ParsingAppliedプロパティをTrueにします。

Valueプロパティにセルの型とは異なる値を代入した場合は、通常の方法により解析、変換されます。

セルの値を変更するのではなく、表示するテキストを変更する場合は、こちらを参考にしてください。

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

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