【c#】datagridviewのセルの入力チェックをする方法【vb.net】

datagridviewのセルの入力チェックを実装する方法を紹介します。
セルへの入力直後に判定処理を実装する方法です。

以下サンプルです。入力された値が整数かどうかチェックします。
CellValidatingメソッドを使用します。

サンプルのイメージ
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;

//変更される前のセル値を取得する。
string BeforeValue =
(dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null) ?
 "" : dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();

//値が変更されていない場合はチェックしない。
if (BeforeValue == e.FormattedValue.ToString())
{
return;
}
//セルフォーカスが離れたセルがチェック対象の列か判定。
if (dgv.Columns[e.ColumnIndex].Name == "CheckCol")
{
//入力された値が整数かどうかチェックする。
int i;
if (int.TryParse(e.FormattedValue.ToString(), out i) == false)
{
MessageBox.Show("整数を入力してください。", "入力エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true; //入力をキャンセルする。
return;
}
}
}
Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating

    Dim dgv As DataGridView = CType(sender, DataGridView)

    '変更される前のセル値を取得する。
    Dim BeforeValue As String = If(dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value Is Nothing, "", dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString)

    '値が変更されていない場合はチェックしない。
    If BeforeValue = e.FormattedValue.ToString Then
        Exit Sub
    End If

    'セルフォーカスが離れたセルがチェック対象の列か判定。
    If dgv.Columns(e.ColumnIndex).Name = "CheckCol" Then
        '入力された値が整数かどうかチェックする。
        Dim i As Integer = 0
        If Integer.TryParse(e.FormattedValue.ToString, i) = False Then
            MessageBox.Show("整数を入力してください。", "入力エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
            e.Cancel = True
            Exit Sub
        End If
    End If

End Sub
タイトルとURLをコピーしました