Dans Windows Forms (.NET 2.0, Visual Studio 2005 SP1): J'ai tapé DataSet, avec une colonne type est System.Boolean, qui est annulable et dont la valeur par défaut est DBNull. J'ai Form, contenant une CheckBoxcommande qui je veux lier à la valeur de la colonne préalable.
- J'ai essayé de lier la
Checkedpropriété à la colonne via le concepteur: il fonctionne très bien, que si la valeur par défaut de la colonne est réglé surTrueouFalse. J'ai essayé de lier la
CheckStatepropriété à la colonne par le concepteur, et fixer mes propresFormatetParsegestionnaires d' événements , mais ils sont jamais appelé: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 };Je l' ai essayé de créer une coutume par
Bindingexemple dans le code, veuillez joindre mes gestionnaires d'événements et l' ajouter auxCheckBoxliaisons: les gestionnaires d'événements sont encore jamais appelés se ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Comme une note: une DBNullvaleur est acceptable en venant de la DataSet(cela signifie que la valeur n'a jamais été définie). Mais l'utilisateur ne devrait être en mesure de définir la valeur Trueou Falsevia CheckBox.
Pour référence, voici le code de l'analyse syntaxique et de formatage méthodes:
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;
}













