it-swarm.com.ru

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

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

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

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

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

Сейчас я просто использую метку (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, позвольте мне неоднократно ненавидеть меня, потому что я DID пытаюсь.

  • дс
31
zillaofthegods

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

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

Вы также можете использовать метод DataSet AcceptChanges (), чтобы применить удаленное полностью.

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

В "аварийном случае if" вы можете проверить, удалена ли строка, прежде чем получить доступ к ее значениям:

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

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

13
Tipx

после удаления строки снова свяжите свою сетку с датируемой таблицей, нет необходимости вручную сбрасывать индекс, с возможностью обработки данных он обрабатывается.

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

0
TalentTuner