2009-11-13 60 views
1

我有一個組合框,其中的項來自DataSet中的DataTable。當沒有選擇的項目(combo.selectedindex = -1),並且我在DataSet上做了一個.Merge()時,組合框的第一個元素被選中。當有一個項目已被選中時,該項目保持選中狀態。如何防止在DataSet.Merge()上選擇組合框第一項()

如何防止這種情況發生,即使我做了一個MyDataSet.Merge(otherDs),selectedIndex仍然在-1(無選擇)?

回答

3

組合框的設計確實是爲了避免沒有選擇。正如你所看到的,可以通過將SelectedIndex設置爲-1來使其處於該狀態,但這並不是ComboBox設計人員想要的隱喻。這個想法是用戶被限制在組合框的值。因此,如果「沒有選擇」是該框的有效值(或者至少對初始加載有效),它需要成爲數據表的一部分。將ValueMember列作爲DBNull.Value並將DisplayMember設置爲「Nothing Selected」或「請選擇一個值」或其他內容是很常見的。

然後你的用戶界面驗證可以確保他們沒有離開它的價值。

更新:如果無法從數據源過程添加值,則可以隨時添加最後一分鐘的值。事實上,有些人可能認爲這是一個好主意,因爲這個「沒有選擇」的選項純粹是一個UI狀態。

DataRow nullRow = MyDataSet.MyTable.NewRow(); 
nullRow["VAL_COLUMN"] = DBNull.Value; 
nullRow["DISP_COLUMN"] = "Please select a value..."; 
MyDataSet.MyTable.Rows.Insert(0, nullRow); //might have those parameters backwards.. 
+0

這似乎是一個好主意。但是,我不知道我可以添加一個項目到列表中,因爲這個列表是databound。我會試着看看我能否做到。 – 2009-11-16 14:22:35

+0

它的工作原理,謝謝。 – 2009-11-16 15:26:01

相關問題