Στα έντυπα των Windows (.NET 2.0, το Visual Studio 2005 SP1): Έχω μια δακτυλογραφημένη DataSet, με μια στήλη που ο τύπος είναι System.Boolean, το οποίο είναι nullable και το οποίο προεπιλεγμένη τιμή είναι DBNull. Έχω ένα Form, που περιέχει ένα CheckBoxστοιχείο ελέγχου που θέλω να συνδέονται προς την τιμή της στήλης πριν.
- Έχω προσπαθήσει να συνδεθεί το
Checkedακίνητο στη στήλη μέσω του σχεδιαστή: λειτουργεί μεγάλο, μόνο αν η προεπιλεγμένη τιμή για τη στήλη έχει οριστεί είτεTrueήFalse. Έχω προσπαθήσει να συνδεθεί το
CheckStateακίνητο στη στήλη μέσω του σχεδιαστή, και συνδέοντας τη δική μουFormatκαιParseεκδήλωση χειριστές, αλλά ποτέ δεν παίρνουν ονομάζεται: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 };Έχω προσπαθήσει να δημιουργήσει μια προσαρμοσμένη
Bindingπαράδειγμα στον κώδικα, αποδίδουν χειρισμού συμβάντων μου και να την προσθέσετε στιςCheckBoxσυνδέσεις: οι χειριστές γεγονότων εξακολουθούν ποτέ να λέγεται ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Ως σημείωση: η DBNullτιμή είναι αποδεκτή μόνο όταν προέρχονται από το DataSet(αυτό σημαίνει ότι η τιμή δεν έχει οριστεί). Όμως, ο χρήστης θα πρέπει να είναι σε θέση να καθορίσει την τιμή μόνο Trueή Falseμέσω του CheckBox.
Για αναφορά, εδώ είναι ο κώδικας των μεθόδων ανάλυσης και μορφοποίηση:
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;
}













