如何将DataGridViewCell转换为Control

时间:2011-11-21 15:39:58

标签: c# datagridview type-conversion

我正在尝试将DataGridView单元转换为控件:

Control dat = new Control();
dat = Convert.ChangeType(dataGridView1[colIndex,rowIndex], typeof(Control));

我从索引代码中获取colIndex和rowIndes的值。问题是即使我尝试了许多代码进行转换,但它也不起作用。

我得到的例外是:

  

无法将对象隐式转换为控件。存在显式转换(你是否错过了演员?)

3 个答案:

答案 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继承的。