假设我设计了一个DataGridView,其comboBoxColumn名为'dataGridViewComboBocColumn'。
我可以使用以下代码填充comboBox:
private void DataGridViewForm_Load(object sender, EventArgs e)
{
BookCollection books = Book.GetAllBooks();
foreach (Book b in books)
{
dataGridViewComboBocColumn.Items.Add(b);
}
dataGridViewComboBocColumn.DisplayMember = "BookName";
dataGridViewComboBocColumn.ValueMember = "BookISBN";
}
但是如何检索选定的项目对象。这样我就可以将该项目转换并转换为Book - object。
答案 0 :(得分:0)
你不能:(
这是DataGridViewComboBoxColumn
的限制。
我通过创建一个TypeDescriptor
来解决这个问题,该{{1}}添加了一个名为'this'的额外项,它返回实例。
答案 1 :(得分:0)
好的,这是你可以做的一点点黑客攻击。首先,挂钩到DataGridView的EditingControlShowing事件,并在事件处理程序中,EventArgs有一个属性e.Control,可以强制转换为标准的ComboBox。因此,保留一个由int作为rowindex键入的字典。然后,在事件处理程序中,将组合框添加到字典中:
private Dictionary<int, ComboBox> comboBoxes;
public Form1()
{
InitializeComponent();
this.comboBoxes = new Dictionary<int, ComboBox>();
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var cb = e.Control as ComboBox;
if (!(this.comboBoxes.ContainsKey(this.dataGridView1.CurrentRow.Index)))
{
this.comboBoxes.Add(this.dataGridView1.CurrentRow.Index, cb);
}
}
然后,当你需要获得组合框的 out 时,只需遍历你的字典,然后获得正确的组合框,然后获取SelectedItem / SelectedValue。