Asp.net 离开GridView页面后维护GridView当前页面索引

Asp.net 离开GridView页面后维护GridView当前页面索引,asp.net,gridview,Asp.net,Gridview,我在ASP.NET web窗体上有一个GridView,我已将其绑定到一个数据源,并将其设置为每页有10条记录 我在GridView上还有一个超链接列,这样用户就可以从列表中导航到另一个页面(详细信息页面)。在详细信息页面上,他们有“返回”按钮返回GridView页面 编辑 我只是想澄清一下这个问题 我正在服务器端寻找关于如何指定页面索引以在数据绑定后设置GridView的示例代码片段。这样做的目的是确保用户导航到他们所在的相同页面索引。您必须使用查询字符串,建议您使用,否则您可以使用会话对象,

我在ASP.NET web窗体上有一个GridView,我已将其绑定到一个数据源,并将其设置为每页有10条记录

我在GridView上还有一个超链接列,这样用户就可以从列表中导航到另一个页面(详细信息页面)。在详细信息页面上,他们有“返回”按钮返回GridView页面

编辑
我只是想澄清一下这个问题


我正在服务器端寻找关于如何指定页面索引以在数据绑定后设置GridView的示例代码片段。这样做的目的是确保用户导航到他们所在的相同页面索引。

您必须使用查询字符串,建议您使用,否则您可以使用会话对象,但不要使用会话对象,因为您可能会在不同页面中打开网格视图,所以请使用查询字符串

gridView1.CurrentPageIndex = (Request["pageNo"] != null) ? Request["pageNo"] as int : 0; 
gridView1.DataSource = myDataSet;
gridView1.DataBind();

您可以在
GridView\u DataBound
event

上更新您的链接,您可以使用三个基本选项:查询字符串、会话、cookie。它们各有优缺点:

  • 使用查询字符串需要格式化所有指向gridview页面的链接,以便在查询字符串中包含正确的信息(最终可能不仅仅是一个页码)
  • 如果您确定每个浏览器实例都希望转到同一个gridview,那么使用会话将起作用,否则您必须使用某些id键标记会话变量,该id键可唯一地识别相关的每个gridview页面。这可能会导致对许多变量进行会话管理,这些变量可能完全不受欢迎,因为它们中的大多数只能在超时时过期
  • 使用cookie需要类似的东西,cookie数据存储在密钥/数据矩阵中(优化的哈希表可能适用于此)。建议不要为正在跟踪的每个gridview页面使用单独的cookie名称,而是使用一个具有通用名称的cookie,该名称保存所有正在跟踪的gridview页面的数据,并且该页面内部具有键/值结构
  • 编辑:关于设置页面索引的小代码段。

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            try
            {
                if(HttpContext.Current.Request["myGVPageId"] != null])
                {
                    myGridview.PageIndex = Convert.ToInt32(HttpContext.Current.Request["myGVPageId"]);
                }
            }
            catch(Exception ex)
            {
                // log it
            }
        }
    }
    

    就我个人而言,我更喜欢会话方法。只需将页面索引保存为会话变量,如果此会话变量在页面加载时不为null,则使用它启动“OnPageIndexChange”方法,如下所示:

    每当页码更改时,设置当前页码:

        protected void GridViewIndexChanging(object sender, GridViewPageEventArgs e)
        {
            myGridView.PageIndex = e.NewPageIndex;
            Session["pageNumber"] = e.NewPageIndex;
            //whatever your page index changing does...
        }
    
    然后,在页面上执行如下操作:

            if (!IsPostBack)
            {
                if (Session["pageNumber"] != null)
                {
                    GridViewIndexChanged(myGridView, new GridViewPageEventArgs((int)Session["pageNumber"]));
                }
            }
    

    您可以使用Gridview的页面索引更改事件,并查找当前页面索引,例如:

    yourGridId.PageIndex=e.NewPageIndex;
    ViewState["GridPageIndex"]=e.NewPageIndex;
    
    在PageLoad上获取Viewstate值

    string pIndex=string.Empty;
    pIndex=Convert.toInt32(ViewState["GridPageIndex"]);
    if(!string.Empty(pIndex))
    {
    yourGridId.PageIndex =pIndex;
    }
    

    我已经编辑了查询,我正在寻找关于如何在数据绑定后设置页面索引的示例代码片段服务器端的GridView PageIndex不是CurrentPageIndexy您忘记了ViewState[]@Fernando68:ViewState仅在链接实际上没有离开页面时才起作用。OP要求提供一个可以单击链接的解决方案,当用户返回页面时,应用相同的索引。ViewState无法完成此操作。如果GridView位于UpdatePanel内,则ViewState就足够了,因为没有整体回发。对不起,我就是这样让它为我工作的。我不希望在会话的整个生命周期中保留数据。@Fernando68:OP明确指出,目的是转到另一个页面,而不是UpdatePanel
    这样用户就可以导航到另一个页面
    。虽然您的观点是正确的,但ViewState将适用于UpdatePanel,这个问题在要求退出当前页面时是明确的。ViewState将不允许这样做。在加载页面上,ViewState[“GridPageIndex”]为空。如果希望页面索引在页面加载时具有任意值,则应使用会话[“GridPageIndex”]