我正在尝试将DataGridView单元转换为控件:
Control dat = new Control();
dat = Convert.ChangeType(dataGridView1[colIndex,rowIndex], typeof(Control));
我从索引代码中获取colIndex和rowIndes的值。问题是即使我尝试了许多代码进行转换,但它也不起作用。
我得到的例外是:
无法将对象隐式转换为控件。存在显式转换(你是否错过了演员?)
答案 0 :(得分:5)
要访问由DataGridViewCell
托管的控件,请在单元格处于编辑模式时使用单元格的EditingControl
属性。
此属性返回System.Windows.Forms.Control
。
您还可以访问DataGridViewEditingControlShowing
事件中的控件 - Control
DataGridViewEditingControlShowingEventArgs
属性System.Windows.Forms.Control
类型。
private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
Control c = e.Control;
}
如果你想在其他时间访问该控件,那么(我相信)你运气不好 - 我说这主要基于DataGridViewEditingControlShowing
上的MSDN文档的引用:
DataGridView控件一次托管一个编辑控件,和 只要单元格类型没有改变,就重复使用编辑控件 之间的编辑。
答案 1 :(得分:1)
Convert.ChangeType
将不起作用,除非在Object和Control之间定义了转换,当然没有。 ChangeType最常用于整数类型,如整数和浮点数。
如果dataGridView1 [colIndex,rowIndex]是一个Control,你应该可以使用普通的显式转换:dat = (Control) dataGridView1[colIndex, rowIndex]
答案 2 :(得分:1)
DataGridView的Item属性(使用行和列索引访问的属性)属于DataGridViewCell类型,不是从System.Windows.Forms.Control继承的。