In Windows Form (.NET 2.0, Visual Studio 2005 SP1): Ho un tipizzato DataSet, con una colonna, che tipo è System.Boolean, che è nullable, e che il valore predefinito è DBNull. Ho un Form, che contiene un CheckBoxcontrollo che voglio associare al valore della colonna precedente.
- Ho cercato di impegnare la
Checkedproprietà per la colonna tramite il designer: funziona benissimo, solo se il valore predefinito per la colonna è impostata suTrueoFalse. Ho cercato di impegnare la
CheckStateproprietà per la colonna tramite il progettista, e allegando le mieFormateParsegestori di eventi, ma non ottengono mai chiamato: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 };Ho cercato di creare un costume
Bindingesempio nel codice, collegare i miei gestori di eventi e aggiungerlo agliCheckBoxattacchi: i gestori di eventi sono ancora mai vengono chiamati ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Come nota: un DBNullvalore accettabile solo quando proveniente dal DataSet(significa il valore non è mai stato impostato). Ma l'utente dovrebbe essere solo in grado di impostare il valore Trueo Falsetramite il CheckBox.
Per riferimento, ecco il codice dei metodi di analisi e di formattazione:
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;
}













