代码之家  ›  专栏  ›  技术社区  ›  Frosty840

为DataGridViewComboBoxCell中的选定项选择ListIndex而不是对象

  •  2
  • Frosty840  · 技术社区  · 16 年前

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

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

    我研究过displaymembers和valuemembers,以及诸如getFormattedValue和getEditedFormattedValue函数之类的函数,但是我不能对它进行深入研究。其中大部分似乎是为数据库数据而设计的,而这并不是我在这里使用的。

    有见识的人能告诉我,为了得到我想要的那种行为,最好的方法是什么吗?

    3 回复  |  直到 16 年前
        1
  •  1
  •   CoderDennis    16 年前

    您不需要覆盖任何内容来实现此功能。

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

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

        2
  •  0
  •   WaterBoy    16 年前

    尝试使用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
  •  0
  •   Community Mohan Dere    8 年前

    我最终使我的数据对象实现了ibindinglist接口,如中所述。 another question I asked 以及重写DataGridViewCell的GetValue和SetValue方法。
    坦率地说,我在过去一周左右遇到的大多数困难都是因为我无法重写DataGridViewCell的Value属性。发现我可以重写这些方法而不是属性,并获得相同的结果,这简直是天赐良机。

    推荐文章