1

我正在使用此代码来填充/格式化 DataGridView。这个想法是,如果用户选中一个复选框,然后点击一个保存按钮,它会将 TrueValue 或 FalseValue 写回数据库。该代码工作正常,但加载 DataGridView 时出现 FalseValue 问题。如果数据库中的所有值都是 TrueValue,则 DataGridView 可以正常打开,则选中所有复选框。用户可以取消选中、选中等等……然后保存,相应的 TrueValue 或 FalseValue 会写入数据库。问题是,如果数据库中有一个 FalseValue,当 DataGridView 加载(或者您将指针放在未选中的复选框上)时,它会引发 DataGridView 默认错误对话框。错误是:

DataGridView 中发生以下异常:“System.FormatException:不是布尔值的有效值。---> System.FormatException:字符串未被识别为有效的布尔值。在 System.Boolean.Parse(String value) 在 System .ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfoculture, Object value) --- 内部异常堆栈跟踪结束 --- 在 System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfoculture, Object value) 在 System.Windows System.Windows.Forms.Formatter.FormatObject(对象值,在 System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context) " 要替换此默认对话框,请处理 DataError 事件。TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)" 要替换此默认对话框,请处理 DataError 事件。TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)" 要替换此默认对话框,请处理 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 字符串,结果相同。我正在尝试做的事情或解决错误的方法是否存在一些明显的问题?

4

0 回答 0