2014-10-18 3 views
0

У меня есть таблица данных. Я добавляю строку в эту таблицу данных. И я хочу получить значения выбранной строки datagridview в некотором текстовом поле, к которому привязана таблица данных. В моем выборе datagridview изменился метод, который я вызываю метод find для набора строк в datatable. Но это дает мне NullReferenceException.C# Winforms DataTable не может найти строку с указанным идентификатором

 private void dgvRecipeMaterial_SelectionChanged(object sender, EventArgs e) 
     { 
      if(dgvRecipeMaterial.SelectedRows.Count > 0 && isDgvRecipeMaterialReady) 
      { 
       int rowIndex = dgvRecipeMaterial.SelectedRows[0].Index; 
       int id = Convert.ToInt32(dgvRecipeMaterial.SelectedRows[0].Cells[0].Value); 
       object[] data = dtrecetemalzemejoin.Rows[0].ItemArray; 
       object[] items = dtrecetemalzemejoin.Rows.Find(id).ItemArray; 
       . 
       . 
       . 
       . 

Я посмотрел на свой идентификатор через отладчик. Его значение равно 1166. И когда я отлаживаю, я вижу, что есть элемент с идентификатором 1166 из массива данных. Но метод find не может найти id 1166. Нет проблем, если в таблице данных больше одной записи. В чем проблема. массив данных имеет идентификатор, но метод поиска не может найти его.

+0

Какая строка кода даст вам 'NullReferenceException'? – Fabio

+0

'object [] items = dtrecetemalzemejoin.Rows.Find (id) .ItemArray;' – MOD

+0

Показать, как вы получаете данные в 'dtrecetemalzemejoin' – Fabio

ответ

0

DataTable.Rows.Find метод поиска строк по столбцам от DataTable.PrimaryKey.
Проверьте, есть ли в вашей исходной ключевой строке столбец, где указано значение ID.
From MSDN: DataTable.PrimaryKey
Если PrimaryKey колонок не установлены. Затем перед использованием Find метода вы установите его так:

dtrecetemalzemejoin.PrimaryKey = {dtrecetemalzemejoin.Columns[0]}; 
//or may be better will be using a name of column 
dtrecetemalzemejoin.PrimaryKey = {dtrecetemalzemejoin.Columns["IDColumn"]}; 
+0

i уже задано значение первичного ключа – MOD

+0

Если' PrimaryKey' содержит столбец, где значение 'id' равно , тогда ваш код работает отлично для меня – Fabio

+0

Да, он содержит, но не работает – MOD

0

вы можете попробовать ниже код я также получаю ту же ошибку

private void dgvRecipeMaterial_SelectionChanged(object sender, EventArgs e) 
     { 
      if(dgvRecipeMaterial.SelectedRows.Count > 0 && isDgvRecipeMaterialReady) 
      { 
       int rowIndex = dgvRecipeMaterial.SelectedRows[0].Index; 
       string id = Convert.ToString(dgvRecipeMaterial.SelectedRows[0].Cells[0].Value); 
       object[] data = dtrecetemalzemejoin.Rows[0].ItemArray; 
       object[] items = dtrecetemalzemejoin.Rows.Find(id).ItemArray; 
       . 
       . 
Смежные вопросы