假设我有一个DataGridView
(名为dataGridView)显示强类型DataTable
(名为ChildDataTable)。
dataGridView有一个DataGridViewCheckBoxColumn
(名为parentIDColumn)绑定到ChildDataTable中每个ChildDataRow上的字段属性ParentID。
ParentID是将ChildDataTableDataTable
与DataSet
(创造性地命名为ParentDataTable)中的另一个相关联的外键。在这种情况下,一个孩子可能只有一个父母。ParentID(和相关的ParentDataTable.ID)字段的类型为Guid
。
ChildDataTable.ParentID允许空值。空值表示子级与任何父级“断开连接”,并且我希望它在dataGridView中显示为未选中CheckBox
的列parentIDColumn(为澄清目的而标记为“有父级”)。
我尝试通过创建实现相等和比较操作的自定义类型来操作parentIDColumnTrueValue
上的andFalseValue
属性:
public class NotDBNull : IComparable
{
public override bool Equals(object obj)
{
return !obj.Equals(DBNull.Value);
}
public override int GetHashCode()
{
return Guid.Empty.GetHashCode();
}
public int CompareTo(object obj)
{
return Equals(obj) ? 0 : 1;
}
}
public class IsDBNull : IComparable
{
public override bool Equals(object obj)
{
return obj.Equals(DBNull.Value);
}
public override int GetHashCode()
{
return DBNull.Value.GetHashCode();
}
public int CompareTo(object obj)
{
return Equals(obj) ? 0 : 1;
}
}
...然后将它们设置为parentIDColumn上的 True/False 值:
parentIDColumn.TrueValue = new NotDBNull();
parentIDColumn.FalseValue = new IsDBNull();
但是调试器从来没有命中我的断点,这表明我错过了这条船。显示dataGridView时出现以下错误:
---------------------------
DataGridView Default Error Dialog
---------------------------
The following exception occurred in the DataGridView:
System.FormatException: Value '39df7d96-941a-4be9-a883-03182363bbab' cannot be converted to type 'Boolean'.
at System.Windows.Forms.Formatter.FormatObjectInternal(Object value, Type targetType, TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue)
at System.Windows.Forms.Formatter.FormatObject(Object value, Type targetType, TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue, Object dataSourceNullValue)
at System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)
To replace this default dialog please handle the DataError event.
---------------------------
OK
---------------------------
所以我知道我的定制没有达到。格式调用似乎发生在单元格级别(而不是列),所以我不确定是否有更好/不同的方式我错过了。
我如何为复选框列注入我的 True/False 逻辑,以便选中表示外键不为空,未选中表示它是?