2013-03-06 22 views
0

我試圖使用源查詢列名獲取DataGridView行中單元格的值。在DataGridView從BindingSource的填充(如它的DataSource屬性設置爲BindingSource的。)InvalidCastException從DataBoundItem中獲取值

var obj = dataGridView1.CurrentRow.DataBoundItem; 

var item = (DataRow)obj; 

在第二行中,我得到一個InvalidCastException:

Unable to cast object of type 'System.Data.DataRowView' to type 'System.Data.DataRow'. 
+0

您使用哪種事件觸發上述代碼? – Zaki 2013-03-06 12:18:22

+0

菜單項點擊。我想選擇行,然後選擇一個菜單項,並使用行數據做一些事情。 – cja 2013-03-06 12:23:46

+0

看看是否有幫助:http://stackoverflow.com/questions/3035144/right-click-to-select-a-row-in-a-datagridview-and-show-a-menu-to-delete-it – Zaki 2013-03-06 12:29:41

回答

2

我猜你的數據源是一個DataTable 。在這種情況下,DataBoundItem的類型是DataRowView而不是DataRow。這基於DataGridView使用DataTable的默認視圖的事實。 如果您要訪問的DataRow你需要這個:

 var obj = dataGridView1.CurrentRow.DataBoundItem; 

     if (obj != null) 
     { 
      var item = ((DataRowView)obj).Row; 
     } 

PS:我一直迴避對象的顯式類型轉換,理論上可以爲空。