0

ビューに10を超えるアイテムがある場合、新しいページが追加され、非常に簡単なグリッドビューがあります...とにかく、ユーザーが2番目のページにいて、そのレコードで削除をクリックすると、最初のページのアイテムがその行は削除されます。例: ページ 1 には 10 個のアイテムがあり、最初の行には部品番号 1234 があり、2 ページ目の最初の行には部品番号 7890 があります。ユーザーが 7890 レコードの削除をクリックすると、1234 レコードが最初の行から削除されます。 、または削除するために選択した対応する行。

コードは次のとおりです。

protected void griditems_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        griditems.PageIndex = e.NewPageIndex;
        BindData();
    }

編集 申し訳ありませんが、削除コマンドは次のとおりです。

 protected void griditems_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            DataTable dt = (DataTable)Session["table"];
            if (dt.Rows.Count > 0)
            {
                dt.Rows.RemoveAt(e.RowIndex);
                griditems.DataSource = dt;
                BindData();
            }
        }
        catch
        {
            //error message
        }
    }

aspx で:

<asp:GridView ID="griditems" runat="server" onrowdeleting="griditems_RowDeleting" onrowediting="griditems_RowEditing" onrowupdating="griditems_RowUpdating"
                  AllowPaging="True" PageSize="10" onpageindexchanging="griditems_PageIndexChanging" Onrowcancelingedit="griditems_RowCancelingEdit" 
                  Caption="Order Details" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" onrowdatabound="griditems_RowDataBound" >            
        <EditRowStyle BackColor="#FF9900" BorderStyle="Double"/> 
        <RowStyle HorizontalAlign="Center"/>
</asp:GridView>
4

1 に答える 1

1

実装も表示する必要がgriditems_RowDeletingありますが、それがなくても、行のインデックスを取得し、ページ番号に各ページのレコード数を掛けたものを追加するだけでよいと想定できます。

Console.WriteLine(e.RowIndex); // 7
Console.WriteLine(griditems.PageIndex); // 3

// Assuming you have 10 records per page, you can safely say...
var realIndexOfRecord = e.RowIndex + griditems.PageIndex * 10; // 37

編集後:

protected void griditems_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    try
    {
        DataTable dt = (DataTable)Session["table"];
        if (dt.Rows.Count > 0)
        {
            // Replace `10` with the appropriate variable
            dt.Rows.RemoveAt(e.RowIndex + griditems.PageIndex * 10);
            griditems.DataSource = dt;
            BindData();
        }
    }
    catch
    {
        //error message
    }
}
于 2012-08-29T18:23:19.033 に答える