In Windows Forms (.NET 2.0, Visual Studio 2005 SP1): Ik heb een getypt DataSet, met een kolom welk type is System.Boolean, dat is vernietigbaar en welke standaardwaarde is DBNull. Ik heb Formgemaakt met een CheckBoxcontrole die wil binden aan de waarde voorafgaande kolom.
- Ik heb geprobeerd om het te binden
Checkedwoning aan de kolom via de ontwerper: het werkt geweldig, alleen als de standaardwaarde voor de kolom is ingesteld opTrueofFalse. Ik heb geprobeerd om het te binden
CheckStatewoning aan de kolom via de ontwerper, en het bevestigen van mijn eigenFormatenParseevent handlers maar ze nooit gecalled: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 };Ik heb geprobeerd om een aangepaste maken
Bindingbijvoorbeeld in de code, bevestigt mijn event handlers toevoegen aan deCheckBoxbindingen: de event handlers nog nooit gecalled ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Als een opmerking: een DBNullwaarde is alleen aanvaardbaar als je vanuit de DataSet(betekent dit dat de waarde is nooit ingesteld). Maar de gebruiker moet alleen in staat om de waarde op Trueof Falsevia het CheckBox.
Ter referentie, hier is de code van de parseer en opmaak methoden:
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;
}













