2012-05-23 4 views
1

У меня есть приложение для Windows, в котором я собираюсь удалить datarow из datatable. Но у меня есть исключение.Удалить Datarow из Datatable

Данные DataRow не находятся в текущем DataRowCollection.

Код:

DataTable dt = new DataTable(); 
DataRowView currentDataRowView = (DataRowView)DataGridView1.CurrentRow.DataBoundItem; 
DataRow row = currentDataRowView.Row; 

dt.Rows.Remove(row); // exception here. 
DataGridView1.DataSource = dt; 

информация Объект DataTable DT как показаны на рисунке. datatable dt

Я думаю, что я уже выбрал datarowview для datarow.

EDIT: dt был создан из другого DataGridView.

   foreach (DataGridViewRow row in DatGridView2.Rows) 
       { 
        DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell; 
        if (check.Value != null) 
        { 
         if ((bool)check.Value) 
         { 
          //this row has a checkBox set to true (tick is added) 
          //add this row to dataTable ... 
          DataRow myRow = (row.DataBoundItem as DataRowView).Row; 
          DataRow dr = dt.NewRow(); 
          dr[0] = myRow[0]; 
          dr[1] = myRow[1]; 
          dr[2] = myRow[2]; 
          dr[3] = myRow[3]; 
          if (!dt.Rows.Contains(dr[0])) 
          { 
           dt.Rows.Add(dr); 
          } 
         } 
        } 
+0

У вашего 'dt' нет строк, поэтому ничего не удалять. – LarsTech

+0

dt.Rows.Count = 2. У него есть строки. –

+0

Где dt получает строки из? На основе вашего кода объявляется несколько строк, прежде чем пытаться удалить строку из нее. – cadrell0

ответ

3

Я не думаю, что вы можете ссылаться на другой объект DataTable, чем тот, где CurrentRow.DataBoundItem откуда.

Ваш dt DataTable строится из DataGridView2, но CurrentRow.DataBoundItem поступает из DataGridView1.

Перед тем, как удалить его, вам придется найти подходящую строку в DataGridView1.

+0

Совершенно неправильно. DataRow row = currentDataRowView.Row; Я уже определил его. –

+0

@ Love Я не знаю, если вы разместили достаточно, чтобы ответить на него. «DataTable dt = new DataTable();» не кажется правильным, потому что он «новый» и, похоже, не имеет никакого отношения к источнику данных DataGridView * before *, чтобы вы его установили. – LarsTech

+0

См. Обновленный. Теперь ошибка becames: «Данные DataRow не находятся в текущем DataRowCollection». Не знаете почему? –

2

Я попробовал ваш код, и он работает без проблем:

 DataTable dt = (DataTable)dataGridView1.DataSource; 
     DataRowView currentDataRowView = (DataRowView)dataGridView1.Rows[0].DataBoundItem; 
     DataRow row = currentDataRowView.Row; 

     dt.Rows.Remove(row); 
     dataGridView1.DataSource = dt; 

Итак, как я уже писал выше, ошибка «Данный DataRow не в текущем DataRowCollection» означает, что вы пытаетесь удалить строка, которая не находится в DataTable «dt».