Навигация по страницам gridview из значений URL

У меня есть gridview с поддержкой базы данных с включенным пейджингом. Все работает нормально и привязано следующим образом: page_load:

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

Есть ли опция, которую я могу включить для номера страницы, автоматически появляется в URL-адресе? Причина, по которой я хочу это сделать, - это указать адрес 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, он отображает ?page=5 в URL-адресе, который я ожидаю, но по какой-то причине на страницах страницы в нижней части экрана выбрана страница 6. Если, например, я нажимаю на странице 10, URL-адрес изменяется на ?page=5?page=10, что явно неверно, что дает ошибку:

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

Ответ 1

Если вы измените код в функции 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.

Ответ 2

Использование:

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

from Подкачка и сортировка GridView с параметрами URL

Ответ 3

Когда вы изменяете индекс страницы для gridview, вам нужно перевязать его или установить индекс страницы перед привязкой:

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

Ответ 4

Попробуйте это, установите параметр PageIndex перед BindData()

if (!Page.IsPostBack)
        {

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

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


            }
            else
            {

                BindData();

            }

        }

Ответ 5

Почему вы вызываете BindData() на GridView1_PageIndexChanged

и при отладке исключения, что именно вы получаете как значение для Request.QueryString["page"]

Возможно, я ошибаюсь, но имеет ли она какую-либо ценность вообще?