2009-11-13 42 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

相关问题