ユーザーがリストにビデオを追加したり削除したりすることができるサイトで作業しています。
追加と削除はすべてチェックボックスで行います。私は一度に複数のビデオを追加することができますが、私は、リストから一度にそれらの複数を削除しようとすると、それは私に、このエラーを与える:「インデックスが範囲外です...」エラー
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
しかし1つを削除する問題がないとき時間。また、私はエラーを取得し、チェックされたビデオがなくなって戻って行く。
これはC#ASP.NETであり、どこにエラーがあるのかわかりませんが、btnDeleteVideo_Click
イベントにあると思います。必要に応じて、他のイベント(btnAddVideo_Click)を参照として表示しています。それが助けになるなら、私はそれを取り除くことができます。私はstackoverflowに新しいので、これはあまりにも少なすぎる場合はごめんなさい申し訳ありません。ここで
は両方の追加と削除イベントのコードです:
protected void btnAddVideo_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in GridView3.Rows)
{
CheckBox chkItem = (CheckBox)gvr.FindControl("cbAdd");
if (chkItem.Checked)
{
String sRecID = GridView3.DataKeys[gvr.RowIndex].Value.ToString();
Session["videorecid"] = sRecID;
SqlDataSource2.Insert();
SqlDataSource2.SelectCommand = "SELECT * FROM dealervideo inner join videos on videos.RecID = dealervideo.VideoRecID inner join dealers on dealers.RecID = dealervideo.DealerRecID where dealers.RecID = " + hidRecID.Value;
GridView2.DataBind();
}
}
GridView2.DataBind();
}
protected void btnDeleteVideo_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in GridView2.Rows)
{
CheckBox chkItem = (CheckBox)gvr.FindControl("cbDelete");
if (chkItem.Checked)
{
String sRecID = GridView2.DataKeys[gvr.RowIndex].Value.ToString();
Session["videorecid"] = sRecID;
SqlDataSource2.Delete();
SqlDataSource2.SelectCommand = "SELECT * FROM dealervideo inner join videos on videos.RecID = dealervideo.VideoRecID inner join dealers on dealers.RecID = dealervideo.DealerRecID where dealers.RecID = " + hidRecID.Value;
GridView2.DataBind();
}
}
}
最後にそれをちょうど1時間を行う、foreachループ内
GridView2.DataBind();
を呼び出さないでください、それではありません最初のものが削除され、次にもう一度削除されます。 – ediblecodeデバッグ情報を追加して、コードがどこに問題があるのかを確認します。私は 'gvrを推測している。RowIndex'が負の値になることがあるので、それを印刷してください(またはステップスルー) – sebagomez
質問を整理してくれてありがとう、私はそれをどうやって行うのか分からず、謝罪します。 – Peter