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