2013-03-06 2 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

+0

Пункт меню нажмите. Я хочу выбрать строку, затем выбрать пункт меню и сделать что-то, используя данные строки. – cja

+0

см., Если это поможет: http://stackoverflow.com/questions/3035144/right-click-to-select-a-row-in-a-datagridview-and-show-a-menu-to-delete-it – Zaki

ответ

2

Я предполагаю ваш DataSource является DataTable , В этом случае типом DataBoundItem является DataRowView вместо DataRow. Это основано на том факте, что DataGridView использует представление DataTable по умолчанию. Если вы хотите получить доступ к DataRow вам это нужно:

 var obj = dataGridView1.CurrentRow.DataBoundItem; 

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

Ps: Я всегда избегать явного приведения объекта, который теоретически может быть нулевым.

Смежные вопросы