我有一个DataGridViewComboBoxCell,其DataSource是一个List。 当从列表中选择一个项目时,我希望存储项目的索引,而不是项目本身,以便我可以切换DataSources并仍然显示相关列表条目。
e.g。我有一份月份清单(1月至12月)。我想选择“四月”并在单元格中存储“3”(但仍然显示“四月”作为选定值)。然后我决定用波兰语显示所有月份值,更改数据源,“4”的值现在显示“kwiecień”。
我已经研究过DisplayMembers和ValueMembers以及类似GetFormattedValue和GetEditedFormattedValue函数的东西,但我无法做出它的头部或尾部。其中大部分似乎是为数据库数据而设计的,而这不是我在这里使用的。
有洞察力的人能告诉我最好的覆盖调用,以便获得我正在寻找的那种行为吗?
答案 0 :(得分:1)
你不需要覆盖任何东西来使这项工作。
创建一个包含2个属性ID
和MonthName
的类,并在列表中存储该类的实例。然后设置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属性。发现我可以覆盖这些方法而不是属性,并获得相同的结果,这是天赐之物。