0

データソースがList<T>. buttonRemove_Click() 関数でグリッドビューからアイテムを削除しようとすると、RowDeleting イベントを処理する別の関数が呼び出され、そこでアイテムも削除List<T>されます。問題は、グリッドビューから複数のアイテムを削除することを選択した場合、グリッドビューのインデックスと非同期のインデックスが削除されることですList<T>。たとえば、グリッドビューとリストに 10 個のアイテムがあり、最後の 2 つのアイテムを削除しようとしています。これが私のbuttonRemove_Click関数で行う方法です

foreach (GridViewRow row in gridViewItems.Rows)
{
    CheckBox cb = (CheckBox)row.FindControl("checkBox");

    if (cb != null && cb.Checked)
    {
        gridViewItems.DeleteRow(row.DataItemIndex);
    }
}

次に、RowDeleting 関数で、最初にインデックス 8 のイベントを受け取ります。これを削除しました。最後のアイテム (インデックス 9) を削除すると、インデックスが範囲外であるため、例外がスローされます。この問題を解決するにはどうすればよいですか?

逆の順序で行を削除しようとすると、つまり最高のインデックスから開始すると、問題は解決すると思います。どうすればこれを行うことができるか誰にもわかりますか?

4

1 に答える 1

1
GVGLCode1.DataSource = dt;
GVGLCode1.DataBind();

int iCount = GVGLCode1.Rows.Count;
for (int i = 0; i <= iCount; i++)
{
    CheckBox cb = (CheckBox)GVGLCode1.rows[i].FindControl("checkBox");
    if (cb != null && cb.Checked)
    { 
       GVGLCode1.DeleteRow(i);
    }
}

これで試してみてください。それはあなたを助けることができるかもしれません。

于 2011-02-11T09:22:07.590 に答える