は、私は強く型付けDataTable
(命名ChildDataTable)を表示さDataGridView
(という名前のDataGridView )を持っていると言います。DataRelationステータスを表示するには、DataGridViewCheckBoxColumnをどのように取得しますか?
DataGridViewのはChildDataTableに各ChildDataRowにフィールドプロパティのParentIDにバインドされている(parentIDColumnという名前)DataGridViewCheckBoxColumn
を持っています。
のParentIDは(創造ParentDataTableと命名)DataSet
内の別DataTable
にChildDataTableに関する外部キーです。この場合、子供には親が1人しかいない可能性があります。 ParentID(および関連するParentDataTable.ID)フィールドのタイプはGuid
です。
ChildDataTable.ParentIDはNULLを許可します。 null値は、子が親から「切断」されていることを表します。にdataGridViewを非表示にするにはparentIDColumnのCheckBox
(明確にするために「親があります」と表示されています)とします。
私は平等と比較演算を実装するカスタムタイプ作成することにより、parentIDColumn上TrueValue
とFalseValue
プロパティを操作しようとしている:
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:
parentIDColumn.TrueValue = new NotDBNull();
parentIDColumn.FalseValue = new IsDBNull();
しかし、デバッガは、私が持っていることを示唆し、私のブレークポイントにヒットすることはありませんボートを逃した。
---------------------------
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
---------------------------
だから私は私のカスタマイズが到達取得されていないことを知っている:私はDataGridViewのの表示時に次のエラーを取得します。書式呼び出しはセルレベル(列ではなく)で行われるように思われるので、私が欠けていたより良い/異なる方法があるかどうかはわかりませんでした。
チェックボックスの列にTrue/Falseロジックを挿入すると、外部キーがNULLでないことを確認し、それがチェックされていないことを意味します。