簡體   English   中英

如何將ComboBox文本設置為不在DataSource(C#)中的值?

[英]How can I set ComboBox text to a value not in DataSource (C#)?

我在窗體上具有多個DropDown樣式的ComboBox,用戶可以在其中指定與值(例如,米,英尺等)關聯的單位。 為此,我在Settings.Settings中使用一個應用程序字符串集合,並將其與一些默認單位類型綁定到ComboBox的DataSource,如下所示:

this.cboUnit.DataSource = 
    (System.Collections.Specialized.StringCollection)Properties.Settings.Default.Units;

用戶能夠成功選擇一個單位或指定一個新單位。

現在,當我將this.cboUnit.Text保存到某些XML配置文件中時,我能夠處理兩種情況。 打開XML配置文件並執行this.cboUnit.Text = "NonExistentUnit"; 將失敗,並導致選擇集合中的第一項。

如何在不將項目添加到ComboBox或修改DataSource本身的情況下修改ComboBox以支持我要求的行為?

當combobox綁定到DataSource時,Using ComboBox.Text中提出了一個解決方案,但我找不到支持此行為的官方文檔。 因此,我寧願避免這種情況。

我找不到將項目插入綁定的DataSource中的任何有效方法。 因此,我最終做了以下工作:

BindingSource bindingSource = new BindingSource((System.Collections.Specialized.StringCollection)Properties.Settings.Default.Units, "");
if(!bindingSource.Contains(someSavedValue))
{
    bindingSource.Insert(0, someSavedValue));
}
this.cboUnit.DataSource = bindingSource;

這將創建綁定源的新實例,可以在將其綁定到數據源之前對其進行修改。 我將此代碼包裝在一個方法中,該方法可以傳遞一個字符串集合和一個存儲的值(在本例中為savedUnit ),該值返回一個新的BindingSource實例。 這對我來說特別有用,因為我現在可以簡單地寫:

this.cboLengthUnit.DataSource = CreateBindingSource(unitsCollection, savedLengthUnit);
this.cboWidthUnit.DataSource = CreateBindingSource(unitsCollection, savedWidthUnit);
this.cboHeightUnit.DataSource = CreateBindingSource(unitsCollection, savedHeightUnit);

我是從內存中編寫上述代碼的,因此可能包含錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM