Ve Windows Forms (.NET 2.0, Visual Studio 2005 SP1): Mám napsaný DataSet, s kolonou, který typ je System.Boolean, který je s možnou hodnotou Null a který Výchozí hodnota je DBNull. Mám Form, obsahuje CheckBoxovládací prvek, který chci vázat na hodnotu předchozího sloupce.
- Snažil jsem se svázat
Checkedvlastnost sloupce přes konstruktéra: funguje to skvěle, jen v případě, že výchozí hodnota pro sloupec je nastaveno buďTrueneboFalse. Snažil jsem se svázat
CheckStatevlastnost sloupce přes konstruktéra a upevnění své vlastníFormataParseudálosti rutiny, ale nikdy s názvem: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 };Snažil jsem se vytvořit vlastní
Bindinginstanci v kódu, připojte své rutiny událostí a přidat ji doCheckBoxvazby: obslužné rutiny událostí jsou ještě nikdy volán ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Jako Poznámka: DBNullhodnota je přijatelná pouze v případě, vycházejícího z DataSet(to znamená, že hodnota nebyla nikdy nastaveny). Ale uživatel by měl být schopen nastavit hodnotu pouze na Truenebo Falsepřes CheckBox.
Pro porovnání je zde kód parsování a formátování metod:
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;
}













