导航离开Gridview页面后维护GridView当前页面索引

时间:2011-02-14 11:26:56

标签: asp.net gridview

我在ASP.NET Web表单上有一个GridView,它已绑定到数据源并将其设置为每页有10条记录。

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

修改
只是为了澄清查询

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

4 个答案:

答案 0 :(得分:2)

您可以使用的三个基本选项:查询字符串,会话,cookie。他们每个人都有自己的缺点和优点:

  1. 使用查询字符串将要求您使用gridview格式化通向页面的所有链接,以在查询字符串中包含正确的信息(最终可能不仅仅是页码)。
  2. 如果您确定每个浏览器实例都想要转到相同的gridview,则使用会话将起作用,否则您将不得不使用某个ID键标记您的会话变量,该ID键对于每个相关的gridview页面都是唯一可识别的。这可能导致会话管理很多变量,这些变量可能完全不合需要,因为大多数变量只能通过超时到期。
  3. 使用cookie需要类似的地方,其中cookie数据存储在密钥/数据矩阵中(优化的哈希表可能适用于此)。我们不建议为您正在跟踪的每个gridview页面都有一个单独的cookie名称,而是使用一个具有通用名称的cookie,该cookie保存所有正在跟踪的gridview页面的数据以及具有键/值结构的内部。 / LI>

    修改:设置网页索引的小代码段。

    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
            }
        }
    }
    

答案 1 :(得分:2)

我个人更喜欢Session方法的粉丝。只需将页面索引保存为会话变量,如果此页面变量在页面加载时不为空,则使用它来触发" OnPageIndexChanging"方法,如:

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

    protected void GridViewIndexChanging(object sender, GridViewPageEventArgs e)
    {
        myGridView.PageIndex = e.NewPageIndex;
        Session["pageNumber"] = e.NewPageIndex;
        //whatever your page index changing does...
    }

然后,在Page_Load上执行以下操作:

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

答案 2 :(得分:1)

你可以使用网格视图的页面索引更改事件并查找e:g的当前页面索引

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

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

答案 3 :(得分:0)

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

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

您可以更新GridView_DataBound活动

上的链接