2011-11-21 50 views
2

我想要一個DataGridView細胞轉化爲控制:如何將DataGridViewCell的轉換爲控制

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

我從一個指數代碼獲取colIndex和rowIndes的值。問題是,即使我嘗試了很多代碼來轉換,它不起作用。

我得到的例外是:

無法對象隱式轉換到控制。一個明確的轉換存在(你是否缺少一個演員?)

+0

爲什麼您需要將單元格轉換爲控件?稍微的上下文可能會幫助你回答你的實際問題(因爲你要求做的事通常不可能超越EditingControl屬性)。 –

回答

5

要訪問由DataGridViewCell託管的控件,請在單元處於編輯模式時使用單元格EditingControl屬性。

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

您還可以在DataGridViewEditingControlShowing事件中獲得控制 - ControlDataGridViewEditingControlShowingEventArgs的屬性類型爲System.Windows.Forms.Control

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

如果要訪問在其他時間的控制,然後(我相信)你的運氣了 - 我說,主要是基於從MSDN文檔這句話對DataGridViewEditingControlShowing

的DataGridView控件一次託管一個編輯控件,並且 只要單元格類型在編輯之間沒有更改 ,就會重新使用編輯控件。

+0

感謝所有你的答覆...我試圖檢查datagrid中的錯誤輸入並在datagrid中的錯誤單元格的位置顯示一個氣泡消息,這就是爲什麼我試圖將單元格轉換爲控制...從上面的答案我已經給出了它表明它是不可能的..是正確的。 ..我想我必須使用一個消息框,然後一個buuble消息..任何如何感謝所有 – Vincent

+0

@vince - 你看過datagridview錯誤文本屬性?這是開箱即用的功能,旨在完成您所要求的功能。 –

+0

我用你的想法和上面的代碼..得到我所要求的......但它不能檢查輸入到文本框中的正確數據..任何如何,但我可以顯示泡沫消息在該特定單元格時不正確價值正在進入....謝謝 – Vincent

1

Convert.ChangeType將不會工作,除非有一個對象和控制之間定義的轉換,當然這沒有。 ChangeType最常用於基本類型,如整數和浮點數。

如果dataGridView1 [colIndex和rowIndex位置]是一個控制,你應該能夠使用普通的顯式轉換:dat = (Control) dataGridView1[colIndex, rowIndex]

1

一個DataGridView的Item屬性(這是您可以訪問使用的是什麼行和列索引)是鍵入DataGridViewCell,它不是從System.Windows.Forms.Control繼承。

+0

對DataGridViewCell類的引用:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.aspx – CAbbott

相關問題