W Windows Forms (.NET 2.0, Visual Studio 2005 SP1): mam wpisane DataSet, z kolumny, która jest typ System.Boolean, który jest pustych i których wartość domyślna to DBNull. Mam Form, zawierające CheckBoxkontrolę że ma wiązać się z uprzednią wartość kolumny.
- Starałem się powiązać
Checkedobiekt do kolumny poprzez autora: działa świetnie, tylko wtedy, gdy wartość domyślna jest ustawiona na kolumnie alboTruealboFalse. Starałem się wiązać
CheckStatewłaściwość kolumny przez projektanta, a dołączenie własnychFormatiParseobsługi zdarzeń, ale nigdy się nie nazywa się: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 utworzyć niestandardową
Bindinginstancję w kodzie, należy dołączyć moje obsługi zdarzeń i dodać go doCheckBoxwiązania: obsługi zdarzeń nigdy nie są jeszcze sprawdzony ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Na marginesie: a DBNullwartość jest dopuszczalne tylko wtedy, gdy pochodzący z DataSet(to znaczy wartość nie została ustawiona). Ale użytkownik powinien być w stanie ustawić wartość jedynie Truelub Falseza pośrednictwem CheckBox.
Dla porównania, tutaj jest kod z metod analizowania 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;
}













