2013-10-04 53 views
10

我有一个数据库驱动的gridview启用分页。一切工作正常,并绑定在Page_Load中,如下所示:从url值导航gridview页

sqldataadapter da = new saldatadapter("sql query"), con); 
datatable dt = new datatable(); 
gridview1.datasource = dt; 
gridview1.databind(); 

有,我可以使页面号码自动出现在URL中的选项?我想这样做的原因是我可以通过电子邮件发送页面号码,然后当用户点击url时,它会导致gridview显示正确页面的数据。

更新2 - 当前全码的要求:

public partial class conflict_search_Default : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 

      if (Request.QueryString["page"] != null) 
      { 

       int index = int.Parse(Request.QueryString["page"]); 
       GridView1.PageIndex = index; 
       BindData(); 


      } 
      else 
      { 

       BindData(); 

      } 

     } 
     else 
     { 

      BindData(); 

     } 
    } 

    private void BindData() 
    { 
     SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["connString"]); 
     SqlDataAdapter da = new SqlDataAdapter("sql query here which returns over 100 pages", con); 

     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     GridView1.DataSource = dt; 

     GridView1.DataBind(); 
    } 

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     int index = e.NewPageIndex + 1; 
     string url = HttpContext.Current.Request.Url.AbsoluteUri; 
     e.Cancel = true; 

     Response.Redirect(string.Format("{0}?page={1}", url, index)); 
    } 

    protected void GridView1_PageIndexChanged(object sender, EventArgs e) 
    { 
     BindData(); 
    } 
} 

这给了我一个错误,当我尝试在寻呼号码在DataGrid的底部点击。错误如下:

如果我加载页面新鲜,它会加载。如果我然后点击第5页,它会在我期望的url中显示?page=5,但由于某种原因,页面6在屏幕底部的分页号上被选中。如果我再单击第10页例如,URL改变?page=5?page=10这显然是错误的,这给了错误:

Input string was not in a correct format. 
int index = int.Parse(Request.QueryString["page"]); 

回答

2

如果更改功能GridView1_PageIndexChanging代码如下就不会有什么问题:

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    e.Cancel = true; 
    int index = e.NewPageIndex; 
    string urlPath = HttpContext.Current.Request.Url.AbsoluteUri; 
    Uri uri = new Uri(urlPath); 
    string url = uri.GetLeftPart(UriPartial.Path); 
    Response.Redirect(string.Format("{0}?page={1}", url, index)); 
} 

而且你不需要韩德尔GridView1_PageIndexChanged事件。

7

用途:

protected void GridView1_PageIndexChanging(Object sender, GridViewPageEventArgs e) 
{ 
    int index = e.NewPageIndex + 1; 
    string url = HttpContext.Current.Request.Url.AbsoluteUri; 
    e.Cancel; 

    Response.Redirect(string.Format("{0}?page={1}", url, index)); 
} 

PageLoad(...) 
{ 
    if (!Page.IsPostBack) 
    { 
      if (Request.QueryString["page"] != null) 
      { 
       int index = int.Parse(Request.QueryString["page"]); 
       // bind your gridview 
      GridView1.PageIndex = index; 
      } 
    } 
} 

GridView Paging and Sorting with url parameters

+0

'e.Cancel'给我错误'CS0201:只有赋值,调用,增量,递减和新的对象表达式可以用作语句'。 – oshirowanen

+0

@oshirowanen e.Cancel = true; – MikroDel

+0

@oshirowanen但不是e.Cancel()= true;没有**()** – MikroDel

2

当您更改页面索引的GridView,你必须重新绑定它,或设置页面索引绑定之前:

 if (!string.IsNullOrEmpty(Request.QueryString["page"]) && int.Parse(Request.QueryString["page"]) < GridView1.PageCount) 
     { 
      GridView1.PageIndex = int.Parse(Request.QueryString["page"]); 
      GridView1.DataBind(); 
     } 
2

试试这个,BindData()

if (!Page.IsPostBack) 
     { 

      if (Request.QueryString["page"] != null) 
      { 

       int index = int.Parse(Request.QueryString["page"]); 
       GridView1.PageIndex = index; 
       BindData(); 


      } 
      else 
      { 

       BindData(); 

      } 

     } 
2

为什么你GridView1_PageIndexChanged

调用BindData()和调试异常时,你到底得到的值Request.QueryString["page"]

也许之前设置的PageIndex我错了,但它有什么价值吗?