Подтвердить что ты не робот

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

К кому это может относиться, я искал значительное количество времени, чтобы выйти из этой ошибки.

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

Я понимаю, что после того, как строка была удалена из datatable, к которой ее невозможно получить обычным способом, и поэтому я получаю эту ошибку. Большая проблема заключается в том, что я не уверен, что делать, чтобы получить желаемый результат, о котором я расскажу ниже.

В основном, когда строка в "dg1" удаляется, строка под ней занимает место удаленной строки (очевидно) и, таким образом, наследует индекс удаленных строк. Целью этого метода является замена и reset индекса строк (путем захвата его из соответствующего значения в наборе данных), который занял место удаленных строк и как таковое значение индекса.

Сейчас я просто использую метку (lblText), чтобы попытаться получить ответ от процесса, но он сработает, когда последний вложенный оператор if пытается сравнить значения.

Вот код:

void dg1_Click(object sender, EventArgs e)
    {
        rowIndex = dg1.CurrentRow.Index; //gets the current rows
        string value = Convert.ToString(dg1.Rows[rowIndex].Cells[0].Value);

        if (ds.Tables[0].Rows[rowIndex].RowState.ToString() == "Deleted")
        {

            for (int i = 0; i < dg1.Rows.Count; i++)
            {

                if (Convert.ToString(ds.Tables[0].Rows[i][0].ToString()) == value) 
                // ^ **where the error is occurring**
                {
                    lblTest.Text = "Aha!";
                    //when working, will place index of compared dataset value into                                   rowState, which is displaying the current index of the row I am focussed on in 'dg1'
                }
            }
        }

Заранее спасибо за помощь, я действительно искал, и, если легко понять, используя простой поиск в Google, то позвольте себе повторяться ненавидеть меня, потому что я попробовал.

  • дс
4b9b3361

Ответ 1

Текущее значение столбца данных во внутреннем операторе if не будет доступно для удаленных строк. Чтобы получить значение для удаленных строк, укажите, что вы хотите получить исходное значение. Это должно исправить вашу ошибку:

if (Convert.ToString(ds.Tables[0].Rows[i][0, DataRowVersion.Original].ToString()) == value)

Ответ 2

Вы также можете использовать метод DataCet AcceptChanges() для полного применения удалений.

ds.Tables[0].Rows[0].Delete();
ds.AcceptChanges();

Ответ 3

В вашем "сбое, если" вы можете проверить, удалена ли строка до доступа к ней:

if (ds.Tables[0].Rows[i].RowState != DataRowState.Deleted &&
    Convert.ToString(ds.Tables[0].Rows[i][0].ToString()) == value)
{
    // blaaaaa
}

Кроме того, я не уверен, почему вы ToString() RowState вместо сравнения с DataRowState.Deleted.

Ответ 4

после удаления строки, переформатируйте сетку с помощью datatable, нет необходимости вручную сбросить индекс, datatable handels it.

поэтому вам нужно повторно привязать источник данных сетки.