【问题标题】:How to convert a DataGridViewCell to a Control如何将 DataGridViewCell 转换为控件
【发布时间】:2011-11-21 15:39:58
【问题描述】:

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

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

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

我得到的例外是:

不能将对象隐式转换为控件。存在显式转换(您是否缺少演员表?)

【问题讨论】:

  • 为什么需要将单元格转换为控件?一些上下文可能有助于为您提供实际问题的答案(因为您要求做的事情通常不可能超出 EditingControl 属性)。

标签: c# datagridview type-conversion


【解决方案1】:

要访问由DataGridViewCell 托管的控件,请使用单元格的EditingControl 属性当单元格处于编辑模式时

此属性返回System.Windows.Forms.Control

您还可以在 DataGridViewEditingControlShowing 事件中获取控件 - DataGridViewEditingControlShowingEventArgsControl 属性属于 System.Windows.Forms.Control 类型。

private void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e)
{
    Control c = e.Control;
}

如果您想在其他时间访问控件,那么(我相信)您就不走运了 - 我说这主要是基于 DataGridViewEditingControlShowing 上的 MSDN 文档中的这句话:

DataGridView 控件一次承载一个编辑控件,并且 只要单元格类型没有改变,就重用编辑控件 编辑之间。

【讨论】:

  • 感谢大家的回复...我正在尝试检查数据网格条目中的错误并在数据网格中错误单元格的位置显示气泡消息,这就是我尝试转换单元格的原因控制...从上面的答案中你给出的答案表明这是不可能的.. 对吗...我想我必须使用一个消息框然后一个 buuble 消息.. 无论如何感谢所有人
  • @vince - 你看过 datagridview 错误文本属性了吗?这是开箱即用的功能,旨在完全满足您的要求。
  • 我使用了你的想法和上面的代码..来得到我想要的......但是它不能检查在文本框中输入的正确数据..无论如何,但我可以显示气泡当输入不正确的值时,该特定单元格的消息....谢谢
  • @vince 你的意思是在输入 DataGridViewTextBoxColumn 单元格时检查输入的数据吗?
【解决方案2】:

Convert.ChangeType 将不起作用,除非在 Object 和 Control 之间定义了转换,当然没有。 ChangeType 最常用于整数和浮点数等原始类型。

如果 dataGridView1[colIndex, rowIndex] 是一个控件,你应该可以使用普通的显式转换:dat = (Control) dataGridView1[colIndex, rowIndex]

【讨论】:

    【解决方案3】:

    DataGridView 的Item 属性(这是您使用行和列索引访问的)的类型为DataGridViewCell,它不是从System.Windows.Forms.Control 继承的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2010-11-16
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多