1

私はグリッド ビューを持っています。ページ 2 をクリックすると、指定されたエラーが SQL コマンドで強調表示されSqlCommand cmdShow = new SqlCommand("delete from Student where NRIC= '" + GridView1.DataKeys[0].Value + "'", conn);ました。Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

これは私のコードです:

  protected void GridView1_RowDeleted(Object sender, GridViewCommandEventArgs e)
    {
        SqlConnection conn = new SqlConnection("Data Source=MCDU\\SQLEXPRESS;Initial Catalog=n;Integrated Security=True");

        conn.Open();

        SqlCommand cmdShow = new SqlCommand("delete from Student where NRIC= '" + GridView1.DataKeys[0].Value + "'", conn);

        cmdShow.ExecuteNonQuery();

        conn.Close();

        Response.Redirect("studentParticulars.aspx");
    }
4

4 に答える 4

1

が空でないかどうかを確認GridView1.DataKeysします。GridView1.DataKeys[0]このエラーは、回線上のオペレーターによってのみ発生する可能性があります。

于 2013-07-29T01:39:59.863 に答える
1

GridView1.DataKeysコレクションにアイテムはありません。

このエラー メッセージは、配列コレクションの境界外にアクセスしようとしたことを意味します。配列またはコレクションにインデックスを付けているように見える場所のみがオンになっていますGridView1.DataKeys

于 2013-07-29T01:41:10.763 に答える
1

deleteボタンをクリックすると、行が削除されることを確認しました。GridView マークアップにあるものから、以下の修正を行ってください。

GridView の DataSourceID として SqlDataSource を使用しているため、この SqldataSource コントロールが削除機能を処理します。これは、削除ボタンをクリックすると、それに応じて GridView がこれをSqlDataSource正しいパラメーターで渡すためです。Deleteこの DataSource コントロールのコマンドを次のように設定するだけです。

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:NorthWindEntities %>"  
SelectCommand="Select top 20 ContactName,CompanyName,CustomerID from Customers" 
DeleteCommand="Delete from Customers where CustomerID=@CustomerID" 
UpdateCommand="UPDATE Customers SET ContactName = ContactName,
CompanyName=@CompanyName WHERE CustomerID = @CustomerID" >
</asp:SqlDataSource>

ここで、GridView マークアップも修正する必要があります。これは、[削除] ボタンで行を削除する必要があり、実際には意味をなさないGridView1_RowDeleted イベント ハンドラーとして関数を割り当てているためです。onrowcommandGridView マークアップは次のようになります。[いいえonrowcommandAutoGenerateDeleteButton="true"]をキープ

<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" BackColor="White" BorderColor="#3366CC"
BorderWidth="1px" CellPadding="4" DataSourceID="SqlDataSource1" Height="50px"
Width="487px" AutoGenerateDeleteButton="True" BorderStyle="None" PageSize="15">

ここで、削除する行に外部キーが設定された子行がないことを確認してください。がある場合は、最初に子行を削除します。

また、ページング リンク (ここではページ 2 をクリックしていました) をクリックすると、 もonrowcommand呼び出され、ロジックを作成しない行を削除していました。

それでおしまい。グリッド ビューでボタンをクリックすると、コマンドが正しくdelete設定されていれば、行が削除されます。DeleteSqlDataSource

コードの間違いを繰り返すだけです:

  • コントロールとして DataSourceId を使用して、このデータソース コントロールSqlDataSourceのコマンドを設定する必要がありDeleteます。[削除] ボタンをクリックすると、GridView はこれをSqlDataSource正しいパラメーターで適切に渡します。

  • onrowcommand 行の削除には使用しないでください。

  • 行が削除された後にコードを実行する場合は、OnRowDeletedイベントを使用します

さらに説明が必要な場合はお知らせください。

于 2013-07-29T08:21:22.633 に答える
0

これをチェックしてください。これをグリッドビューのページネーションとして配置する必要があることを常に覚えておいてください

 protected void grdView_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
    grdView.PageIndex = e.NewPageIndex;
    grdView.DataSource = bindgrid();
    grdView.DataBind();  
}

これはサンプルコードのリンクです

http://www.dotnetspider.com/resources/1249-Grid-View-Paging-Sorting.aspx

これがあなたを助けることができることを願っています=)

于 2013-07-29T02:48:43.670 に答える