sql-server GridView页面索引

5q4ezhmt  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(119)

我正在使用GridView显示数据库中的数据,但PageIndex出现问题,分页工作正常,我可以看到所有信息,但每行末尾的按钮出现问题,该按钮的操作是删除行
在网格视图中,该按钮在第一页中工作正常,删除行的操作也工作正常,但当我切换到第二页时
抛出异常:mscorlib.dll中的'System.ArgumentOutOfRangeException'(“索引超出范围。必须是非负数且小于集合的大小。”)
问题是GridView的Page Size设置为10,因此在第一页中,行设置为(显然像数组一样)从0到9,但当我切换到第二页时,数组继续从10到19,因此如果我单击第二页第一行上的按钮,CommandArgument将返回“10”

(转换为数组中的11元素)并且大于网格视图的页面大小

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        FillGrid();
    }

public void FillGrid()
    {
        Methods metodos = new Methods();
        string query = "SELECT * FROM ul";
        GridView1.DataSource = metodos.Query(query);
        GridView1.DataBind();
    }

此处发生错误

if (e.CommandName == "btnDelete")
        {   
            int index = Convert.ToInt32(e.CommandArgument);
            //Get row number
            GridViewRow row = GridView1.Rows[index];
        }

变量index返回10,并且发生错误,因为该值(数组中的11元素)大于网格的页面大小,并且它没有像错误所示的less than the size of the collection那样“查找”行
我试过设置GridView1.PageIndex = 0;但如果设置GridView1.PageIndex = e.NewPageIndex后放置数据绑定,分页将停止工作;分页再次停止工作
编辑:这是网格视图上的按钮

<asp:Button runat="server" Text="Delete CommandName="btnDelete" CommandArgument="<%# Container.DataItemIndex %>" CausesValidation="false"/>
8yoxcaq7

8yoxcaq71#

问题似乎来自下面的CommandArgument属性定义:

CommandArgument="<%# Container.DataItemIndex %>"

根据该引用,DataItemIndex返回一个值,而与当前页码无关,并且Rows集合索引取决于PageSize设置,该设置从不超过页面大小限制,因此在访问具有相应索引的Rows集合时将引发ArgumentOutOfRangeException
此问题的简单解决方法是对CommandArgument使用网格的PageSize属性的模运算,并将其值用作行索引:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "btnDelete")
    {   
        int index = (Convert.ToInt32(e.CommandArgument)) % GridView1.PageSize;

        //Get row number
        GridViewRow row = GridView1.Rows[index];
    }
}

参考编号:
GridViewRow.DataItemIndex (MS Docs)
类似问题:
“Index was out of range” when Accessing the DataKeys Collection in a Paged GridView

相关问题