Winforms綁定會生成兩個重要且有用的事件:Format
和Parse
。
將數據從源數據拉入控件時觸發format事件,並且在將數據從控件拉回到數據源時觸發Parse事件。
如果處理這些事件,您可以在綁定過程中更改/重新鍵入來回的值。
例如,下面是這些事件的幾個例子處理程序:
public static void StringValuetoEnum<T>(object sender, ConvertEventArgs cevent)
{
T type = default(T);
if (cevent.DesiredType != type.GetType()) return;
cevent.Value = Enum.Parse(type.GetType(), cevent.Value.ToString());
}
public static void EnumToStringValue<T>(object sender, ConvertEventArgs cevent)
{
//if (cevent.DesiredType != typeof(string)) return;
cevent.Value = ((int)cevent.Value).ToString();
}
,這裏是一些代碼粘貼這些事件處理程序:
List<NameValuePair> bts = EnumHelper.EnumToNameValuePairList<LegalEntityType>(true, null);
this.cboIncType.DataSource = bts;
this.cboIncType.DisplayMember = "Name";
this.cboIncType.ValueMember = "Value";
Binding a = new Binding("SelectedValue", this.ActiveCustomer.Classification.BusinessType, "LegalEntityType");
a.Format += new ConvertEventHandler(ControlValueFormatter.EnumToStringValue<LegalEntityType>);
a.Parse += new ConvertEventHandler(ControlValueFormatter.StringValuetoEnum<LegalEntityType>);
this.cboIncType.DataBindings.Add(a);
所以你的情況,你可以只創建一個SecEnum爲格式事件的Bool處理程序,並在其中執行類似操作:
SecEnum se = Enum.Parse(typeof(SecEnum), cevent.Value.ToString());
cevent.Value = (bool)(se== SecEnum.Secure);
然後在解析過程中反轉。
也許你可能會更具體一點你想綁定什麼?複選框到一個int列?枚舉到位列? – 2010-01-11 18:59:58
對不起,我現在添加更多細節。 – 2010-01-11 19:26:07