我想寫一個方法,它需要一個ComboBox,一個DataTable和一個TextBox作爲參數。它的目的是根據TextBox.Text過濾組合框中顯示的成員。 DataTable包含將被過濾的可能條目的整個列表。爲了過濾,我創建了DataTable的DataView,添加一個RowFilter,然後將此View作爲DataSource綁定到ComboBox。在樣式爲「DropDownList」的ComboBox中使用空行作爲默認行?
爲了防止用戶輸入到組合框中,我選擇了DropDownStyle DropDownList。目前爲止工作正常,除了用戶還應該能夠選擇任何內容/空行。事實上,這應該是要顯示的默認成員(以防止偶然選擇錯誤的成員,如果用戶通過對話快速點擊)。
我試圖通過向視圖添加新行來解決此問題。雖然這適用於某些情況,但這裏的主要問題是任何DataTable都可以傳遞給方法。如果DataTable包含的列不能爲空並且不包含默認值,那麼我想通過添加一個空行來引發錯誤。
可能會創建一個視圖,其中只包含定義爲DisplayMember的列和定義爲ValueMember的視圖。唉,這不能用C#中的視圖來完成。我想避免不惜一切代價創建DataTable的真實副本,因爲誰知道它會隨着時間的推移會有多大。
你有什麼建議如何解決這個問題?
而不是一個視圖,我可以創建一個包含兩個成員的對象,並將DisplayMember和ValueMember分配給這些成員?成員會被作爲參考傳遞(我希望)還是會被真實複製創建(在這種情況下,它不會是一種解決方案)?
非常感謝您的幫助!
問候
public static void ComboFilter(ComboBox cb, DataTable dtSource, TextBox filterTextBox)
{
cb.DropDownStyle = ComboBoxStyle.DropDownList;
string displayMember = cb.DisplayMember;
DataView filterView = new DataView(dtSource);
filterView.AddNew();
filterView.RowFilter = displayMember + " LIKE '%" + filterTextBox.Text + "%'";
cb.DataSource = filterView;
}
P.S.對不起,代碼有點搞砸了:( – 2010-03-26 08:59:22
對於代碼格式化,選擇你的代碼部分,並給予坦克提示Ctrl + K – Amsakanna 2010-03-26 09:03:09
!但是我不能編輯/糾正我的問題,我可以嗎? – 2010-03-26 09:09:29