如果我數據綁定一個winforms組合框,有沒有辦法讓綁定不區分大小寫?Windows窗體組合框 - 不區分大小寫的數據綁定
例如,如果組合框綁定到值爲FOO的屬性,請讓它選擇值爲Foo的組合框項目?
如果我數據綁定一個winforms組合框,有沒有辦法讓綁定不區分大小寫?Windows窗體組合框 - 不區分大小寫的數據綁定
例如,如果組合框綁定到值爲FOO的屬性,請讓它選擇值爲Foo的組合框項目?
不,這是不可能的。這是使用區分大小寫的反射在內部實現的。
有點太遲了,但這裏是我做了什麼,讓不區分大小寫綁定到一個WinForms組合框:
我已經創建了自己的類,從組合框繼承,並增加了以下屬性我的數據綁定到(原諒從VB.NET自動轉換):
public object Value {
get {
if (string.IsNullOrEmpty(ValueMember)) {
return Text;
} else {
return SelectedValue;
}
}
set {
if (DesignMode)
return;
// If we're databound, Value is the SelectedValue. Otherwise, it's the Text.
object oldValue = string.IsNullOrEmpty(ValueMember) ? Text : SelectedValue;
// Want to make sure we're comparing apples to apples, and not specific instances of apples.
string strOld = oldValue == null ? string.Empty : Convert.ToString(oldValue);
string strNew = value == null ? string.Empty : Convert.ToString(value);
if (!string.Equals(strOld, strNew, StringComparison.OrdinalIgnoreCase)) {
if (ValueMember.HasValue) {
if (value != null && !string.IsNullOrEmpty(Convert.ToString(value))) {
SelectedItem = Items.OfType<object>.FirstOrDefault((System.Object i) => string.Equals(Convert.ToString(FilterItemOnProperty(i, ValueMember)), strNew, StringComparison.OrdinalIgnoreCase));
} else {
SelectedIndex = -1;
}
} else {
Text = value != null ? value.ToString : string.Empty;
}
ValidateField();
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
}
}
}
ValidateField
是,你也許可以忽略自定義方法,但你要實現INotifyPropertyChanged
Value屬性。
請注意,在上面的代碼中綁定到Value屬性的數據類型應該是基本值類型(或String)而不是複雜對象,否則Convert.ToString可能會返回兩個相同的字符串不同的對象(如果對象的類沒有覆蓋.ToString方法,則爲表示對象類型的字符串)。由於您可能使用它將數據庫行中的字段綁定到ComboBox的DataSource集合/表中的屬性或字段,因此這應該不成問題。 – MCattle 2012-09-21 16:00:01