En Windows Forms (.NET 2.0, Visual Studio 2005 SP1): Tengo un tipeado DataSet, con una columna cuyo tipo es System.Boolean, que es anulable y cuál es el valor predeterminado DBNull. Tengo a Form, que contiene un CheckBoxcontrol que quiero vincular al valor de la columna anterior.
- He intentado vincular la
Checkedpropiedad a la columna a través del diseñador: funciona muy bien, solo si el valor predeterminado para la columna está establecido enTrueoFalse. He tratado de obligar a la
CheckStatepropiedad a la columna por el diseñador, y adjuntando mis propiasFormatyParsecontroladores de eventos pero nunca me llama: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 };Intenté crear una
Bindinginstancia personalizada en el código, adjuntar mis controladores de eventos y agregarlo a losCheckBoxenlaces: los controladores de eventos nunca se llaman ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Como nota: un DBNullvalor es aceptable solo cuando proviene del DataSet(significa que el valor nunca se ha establecido). Pero el usuario solo debería poder establecer el valor en Trueo a Falsetravés de CheckBox.
Como referencia, aquí está el código de los métodos de análisis y formateo:
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;
}













