为DataGridViewComboBoxCell中的选定条目选择ListIndex而不是Object

时间:2009-06-23 12:19:01

标签: .net datagridview

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

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

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

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

3 个答案:

答案 0 :(得分:1)

你不需要覆盖任何东西来使这项工作。

创建一个包含2个属性IDMonthName的类,并在列表中存储该类的实例。然后设置ValueMember = "ID"DisplayMember = "MonthName"应该有效。

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

答案 1 :(得分:0)

尝试使用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;
        }
    }

答案 2 :(得分:0)

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