【问题标题】:Select ListIndex instead of Object for selected entry in DataGridViewComboBoxCell为 DataGridViewComboBoxCell 中的选定条目选择 ListIndex 而不是 Object
【发布时间】:2009-06-23 12:19:00
【问题描述】:

我有一个 DataGridViewComboBoxCell,它的 DataSource 是一个列表。 当从列表中选择一个项目时,我希望存储项目的索引,而不是项目本身,以便我可以切换数据源并仍然显示相关的列表条目。

例如我有一份月份清单(1 月至 12 月)。我想选择“April”并将“3”存储在单元格中(但仍将“April”显示为所选值)。然后我决定用波兰语显示所有月份值,更改数据源,“4”的值现在显示“kwiecień”。

我已经研究过 DisplayMembers 和 ValueMembers 以及诸如 GetFormattedValue 和 GetEditedFormattedValue 函数之类的东西,但我无法确定它的头或尾。其中大部分似乎是为与数据库数据一起使用而设计的,这不是我在这里使用的。

有洞察力的人可以告诉我最好的覆盖调用以获得我正在寻找的那种行为吗?

【问题讨论】:

  • 在你第二段的例子中,我认为你把四月和五月搞混了。另外,您使用的是哪种 .net 语言?

标签: .net datagridview


【解决方案1】:

您无需重写任何内容即可使其正常工作。

创建一个具有 2 个属性 IDMonthName 的类,并将该类的实例存储在您的列表中。然后设置ValueMember = "ID"DisplayMember = "MonthName" 应该可以工作。

我可以举个例子。您使用的是 C# 还是 VB.NET?

【讨论】:

    【解决方案2】:

    尝试使用 DataGridView 的编辑控件属性。这应该可以让您访问组合框的属性。

    这是一个简单的例子。

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            // Cast the editing control as a ComboBox to get to the selected index property
            ComboBox cb = dataGridView1.EditingControl as ComboBox;
            if (cb != null)
            {
                int selectedIndex = cb.SelectedIndex;
            }
        }
    

    【讨论】:

      【解决方案3】:

      我最终使我的数据对象实现了 iBindingList 接口,如 another question I asked 中所述,并覆盖了我的 DataGridViewCell 的 GetValue 和 SetValue 方法。
      坦率地说,过去一周左右我的大部分困难都来自于我无法覆盖 DataGridViewCell 的 Value 属性。发现我可以覆盖这些方法而不是属性,并获得相同的结果,真是天赐之物。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        • 2018-11-30
        • 2020-06-23
        相关资源
        最近更新 更多