我有一个ComboBox,其中的项目来自DataSet中的DataTable。如果没有选择项目(combo.selectedindex = -1)并且我在DataSet上执行.Merge(),则选择组合框的第一个元素。如果已选择某个项目,则该项目会保持选中状态。
如何防止这种情况发生,即使我执行MyDataSet.Merge(otherDs),selectedIndex仍为-1(无选择)?
答案 0 :(得分:3)
组合框的设计目的是避免选择。正如您所见,通过将SelectedIndex设置为-1可以使其处于该状态,但这并不是ComboBox设计人员想要的隐喻。这个想法是用户被限制在组合框值。因此,如果“Nothing Selected”是该框的有效值(或者至少对初始加载有效),则它必须是数据表的一部分。通常将ValueMember列的行作为DBNull.Value,将DisplayMember作为“Nothing Selected”或“Please select a value”或其他任何内容。
然后您的UI验证可以确保他们不会将其留在该值上。
更新:如果无法从数据源过程添加值,则始终可以在最后一分钟添加值。事实上,有些人可能认为这是一个好主意,因为这个“没有选择”选项纯粹是一种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..