I Windows Forms (.NET 2.0, Visual Studio 2005 SP1): Jeg har en skrevet DataSet, med en kolonne som type er System.Boolean, som kan ha nullverdier og som standardverdi er DBNull. Jeg har en Form, inneholdende en CheckBoxkontroll som jeg ønsker å binde seg til den tidligere kolonneverdi.
- Jeg har forsøkt å binde
Checkedeiendom til kolonnen via designeren: det fungerer bra, hvis standardverdien for kolonnen er satt til entenTrueellerFalse. Jeg har forsøkt å binde
CheckStateeiendom til kolonnen via designer, og feste mine egneFormatogParseevent handlers, men de aldri bli kalt: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 };Jeg har forsøkt å lage en egendefinert
Bindingeksempel i koden, legge mine hendelsesbehandlinger og legge den til deCheckBoxbindingene: hendelses handlers er likevel aldri bli kalt ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Som et notat: en DBNullverdi er akseptabelt bare når kommer fra DataSet(det betyr at verdien har aldri satt). Men brukeren bør bare være i stand til å sette verdien til Trueeller Falsevia CheckBox.
For referanse, her er koden for parsing og formatering metoder:
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;
}













