Jak powiązać CheckBox z DbColumn typu bool, który jest pusty?
W Windows Forms (.NET 2.0, Visual Studio 2005 SP1): Mam wpisanyDataSet
, z kolumną, która jest typemSystem.Boolean
, która jest pusta i której wartością domyślną jestDBNull
. mamForm
, zawierający aCheckBox
kontrola, którą chcę powiązać z poprzednią wartością kolumny.
Checked
właściwość do kolumny za pośrednictwem projektanta: działa świetnie, tylko jeśli domyślna wartość kolumny jest ustawiona na alboTrue
lubFalse
.Próbowałem związaćCheckState
własność do kolumny za pośrednictwem projektanta i dołączanie własnychFormat
iParse
obsługa zdarzeń, ale nigdy się nie nazywa:
b.Format+=delegate(object sender, ConvertEventArgs cevent) {
cevent.Value=DoFormat((CheckState)cevent.Value); // cf. end of the question
};
b.Parse+=delegate(object sender, ConvertEventArgs cevent) {
cevent.Value=DoParse(cevent.Value); // cf. end of the question
};
Próbowałem stworzyć niestandardowyBinding
wystąpienie w kodzie, dołącz moje programy obsługi zdarzeń i dodaj je doCheckBox
powiązania: programy obsługi zdarzeń wciąż nie są wywoływane ...
Binding b=new Binding("CheckState", _BindingSource, "MyColumn", false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Jako notatkę: aDBNull
wartość jest akceptowalna tylko wtedy, gdy pochodzi zDataSet
(oznacza to, że wartość nigdy nie została ustawiona). Ale użytkownik powinien mieć możliwość ustawienia wartości tylko naTrue
lubFalse
za pośrednictwemCheckBox
.
Dla odniesienia, oto kod metod parsowania i formatowania:
internal static CheckState DoParse(object value)
{
if ((value==null) || (value is DBNull))
return CheckState.Indeterminate;
bool v=Convert.ToBoolean(value);
return (v ? CheckState.Checked : CheckState.Unchecked);
}
internal static object DoFormat(CheckState value)
{
switch (value)
{
case CheckState.Checked:
return true;
case CheckState.Indeterminate:
return DBNull.Value;
case CheckState.Unchecked:
return false;
}
return null;
}