【问题标题】:How to prevent a combobox first item from being selected on DataSet.Merge()如何防止在 DataSet.Merge() 上选择组合框第一项
【发布时间】:2009-11-13 15:49:15
【问题描述】:

我有一个 ComboBox,其中的项目来自 DataSet 中的 DataTable。当没有选择项目(combo.selectedindex = -1)并且我在 DataSet 上执行 .Merge() 时,选择了组合框的第一个元素。当已经选择了一个项目时,该项目保持选中状态。

如何防止这种情况发生,即使我执行 MyDataSet.Merge(otherDs),selectedIndex 仍保持在 -1(无选择)?

【问题讨论】:

    标签: .net data-binding combobox


    【解决方案1】:

    组合框的设计目的是避免没有选择。正如您所看到的,可以通过将 SelectedIndex 设置为 -1 来使其处于该状态,但这并不是 ComboBox 设计者真正想要的隐喻。这个想法是用户仅限于组合框值。因此,如果“未选择”是框的有效值(或至少对初始加载有效),则它需要成为数据表的一部分。通常有一行 ValueMember 列为 DBNull.Value 并且 DisplayMember 为“未选择”或“请选择一个值”或其他任何内容。

    然后您的 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..
    

    【讨论】:

    • 这似乎是个好主意。但是,我不确定是否可以将项目添加到列表中,因为列表是数据绑定的。我会试试看能不能成功。
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多