1. ホーム
  2. c#

[解決済み] エラーが発生しました。削除された行の情報には、その行を通じてアクセスできません

2022-02-28 06:45:36

質問

関係各位、私はこのエラーから抜け出す方法を見つけるためにかなりの時間を費やしました。

削除された行の情報には、行を通してアクセスできません。

データテーブルから行が削除されると、通常の方法ではアクセスできなくなることは理解しており、このエラーが発生する理由もそこにあります。大きな問題は、希望する結果を得るために何をすればよいのかがわからないことです。

基本的に "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検索を介して把握することが容易であるなら、私は試してみましたので、繰り返し私に嫌われることを許可します。

  • ジーシー

解決方法は?

内側のif文のデータ列の現在値は、削除された行には使用できません。 削除された行の値を取得するには、元の値を取得するように指定してください。 これでエラーは修正されるはずです。

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