このコードを使用して、DataGridView を入力/フォーマットしています。アイデアは、ユーザーがチェックボックスをオンにして後で保存ボタンを押すと、TrueValue または FalseValue のいずれかをデータベースに書き戻すというものです。DataGridView が読み込まれるときの FalseValue の問題を除いて、コードは正常に機能します。データベース内のすべての値が TrueValue の場合、DataGridView は正常に開き、すべてのチェックボックスがオンになります。ユーザーはチェックを外したり、チェックしたり、何でも保存できます。適切な TrueValue または FalseValue がそれに応じてデータベースに書き込まれます。問題は、データベースに FalseValue がある場合、DataGridView が読み込まれる (またはチェックされていないチェックボックスの上にポインターを置く) ときに、DataGridView の既定のエラー ダイアログが表示されることです。エラーは次のとおりです。
DataGridView で次の例外が発生しました: "System.FormatException: はブール値の有効な値ではありません。 ---> System.FormatException: 文字列は有効なブール値として認識されませんでした。 システムで System.Boolean.Parse(String value) で.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) --- 内部例外スタック トレースの終了 --- System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) at System.Windows .Forms.Formatter.FormatObjectInternal(Object value, Type targetType, TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, ObjectformattedNullValue) at System.Windows.Forms.Formatter.FormatObject(Object value,System.Windows.Forms.DataGridViewCell.GetFormattedValue(オブジェクト値、Int32 rowIndex、DataGridViewCellStyle& cellStyle、TypeConverter valueTypeConverter、TypeConverterformattedValueTypeConverter、DataGridViewDataErrorContexts コンテキスト) " このデフォルト ダイアログを置き換えるには、DataError イベントを処理してください。このデフォルト ダイアログを置き換えるには、DataError イベントを処理してください。このデフォルト ダイアログを置き換えるには、DataError イベントを処理してください。
私のコードは次のようになります。
Me.dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
Me.dgv.EnableHeadersVisualStyles = False
Me.dgv.Columns.Clear()
Me.dgv.AutoGenerateColumns = False
Me.dgv.Columns.Add(New DataGridViewTextBoxColumn With {.DataPropertyName = "Column_one", .HeaderText = "one", .ReadOnly = True})
Me.dgv.Columns.Add(New DataGridViewTextBoxColumn With {.DataPropertyName = "Column_two", .HeaderText = "two", .ReadOnly = True})
Me.dgv.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "Column_three", .HeaderText = "three", .TrueValue = "THR", .FalseValue = ""})
Me.dgv.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "Column_four", .HeaderText = "four", .TrueValue = "FO", .FalseValue = ""})
Me.dgv.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "Column_five", .HeaderText = "five", .TrueValue = "FI", .FalseValue = ""})
Me.dgv.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "Column_six", .HeaderText = "six", .TrueValue = "SI", .FalseValue = ""})
Me.dgv.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "Column_seven", .HeaderText = "seven", .TrueValue = "SEV", .FalseValue = ""})
Me.dgv.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "Column_eight", .HeaderText = "8", .TrueValue = "EI", .FalseValue = ""})
Me.dgv.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "Column_nine", .HeaderText = "9", .TrueValue = "NINE", .FalseValue = ""})
For i = 0 To Me.dgv.Columns.Count - 1
If i >= 2 Then
Me.dgv.Columns(i).HeaderCell.Style.BackColor = Color.Yellow
End If
Next
Me.dgv.DataSource = dt
TrueValue が正常に機能する理由がわかりませんが、FalseValue はそうではありません。"" 以外の FalseValue 文字列を試しましたが、同じ結果になりました。私がやろうとしていること、またはエラーを発生させる方法に明らかな問題はありますか?