【VB.NET】DataGridViewの入力値が不正の場合、背景色を変更する

画面イメージ

セルの入力値が不正の場合、ErrorTextを設定する

VB
 Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating

     Dim newValue As String = e.FormattedValue.ToString()

     Select Case DataGridView1.Columns(e.ColumnIndex).Name
         Case "ProductName"
             If newValue = "" Then
                 DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = "商品名を入力してください。"
             Else
                 DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = ""
             End If
         Case "Count"
             If Not IsNumeric(newValue) Then
                 DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = "数値を入力してください。"
             Else
                 DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = ""
             End If
     End Select

 End Sub

セルにErrorTextが設定されている場合、背景色を変更する

VB
 Private Sub DataGridView1_CellErrorTextChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellErrorTextChanged

     Dim errorText As String = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText

     ' エラーメッセージの内容に応じて、UIを更新
     If String.IsNullOrEmpty(errorText) Then
         ' エラーがない場合の処理
         DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.White
     Else
         ' エラーがある場合の処理
         DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.Red
     End If

 End Sub

動作確認用コード

VB
 Public G_dtOrder As New DataTable
 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

     With G_dtOrder
         .Columns.Add("OrderID", GetType(String))
         .Columns.Add("ProductName", GetType(String))
         .Columns.Add("Count", GetType(String))
         .Rows.Add("1", "にんじん", "10")
         .Rows.Add("2", "きゃべつ", "20")
         .Rows.Add("3", "きゅうり", "30")
         .Rows.Add("4", "たまねぎ", "40")
     End With

     With DataGridView1
         .DataSource = G_dtOrder
         .AllowUserToAddRows = False
     End With

 End Sub

コメント

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