Как удалить строку из моего набора данных, используя Rowstate и Delete()

Возможный дубликат:
Ошибка: удаленная информация о строке не может быть доступна через строку. (С #)

Я получаю эту ошибку, когда я пытаюсь удалить строку из моего DataSet:

Информация об удаленной строке не может быть доступна через строку

Как это исправить.

Вот моя функция ниже:

    private void btnDelete_Click(object sender, EventArgs e)
    {
       var result =  MessageBox.Show("Proceed to deleting this location?", "Delete Location", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
       if (result == DialogResult.Yes)
       {
            var row = myData.xspArea.FindByxar_Id(pRow.xar_Id);
            if (row.RowState != DataRowState.Deleted)
            {
                row.Delete();
                MessageBox.Show("This location has been deleted", "Location Deleted", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
       }
       else
       {
          this.Close();
       }
    }

3 ответа

Я думаю, вам нужно позвонить mData.AcceptChanges() после строки. Удалить ().

РЕДАКТИРОВАТЬ:

Как говорит @Tim Schmelter:AcceptChanges предотвратит обновления в базе данных, так как состояние строки - это то, что адаптер данных использует для определения того, что делать со строкой

Возможно, стоит прочитать документацию MSDN, чтобы понять, что row.Delete() должен делать.

Если RowState строки добавлен, RowState становится Detached и строка удаляется из таблицы при вызове AcceptChanges.

RowState становится удаленным после того, как вы используете метод Delete в существующем DataRow. Он остается удаленным, пока вы не вызовете AcceptChanges. В это время DataRow удаляется из таблицы.

Удаленную строку можно восстановить, вызвав RejectChanges.

Так, row.Delete() изменит row.RowState в DataRowState.Deleted,

Если вы хотите, чтобы ваша строка была фактически удалена из DataSet, вам нужно вызвать row.AcceptChanges(),

Я предполагаю, что на самом деле возникает исключение FindByxar_Id(pRow.xar_Id) и не позже row.Delete();, Вы создали копию DataRow с pRow или эта строка также удалена (может быть, через ограничения каскадного удаления)? Тогда вы не можете получить доступ к xar_Id потому что он уже удален.

Так проверьте это также:

// ...
if(pRow.RowState != DataRowState.Deleted)
{
    var row = myData.xspArea.FindByxar_Id(pRow.xar_Id);
    if (row.RowState != DataRowState.Deleted)
    {
        row.Delete();
        // ...
    }
// ...

Если вы хотите обновить базу данных, вам нужно использовать DataAdapter,

Другие вопросы по тегам