asp.net gridview динамически связывает

У меня есть GridView,

<asp:GridView ID="managerList" runat="server" DataSourceID="SqlDataSource2">

в коде позади,

protected void Page_Load(object sender, EventArgs e)
{
    SqlDataSource2.SelectCommand = "select * from manager";
    managerList.AllowPaging = true;
}

когда я загружаю страницу, она работает нормально, подкачка тоже работает нормально.

Затем я хочу получить подмножество списка, нажав на кнопку поиска:

protected void btnSearch_Click(object sender, EventArgs e)
{
    SqlDataSource2.SelectCommand = "select * from manager where age > 30";
    managerList.DataBind();
}

это работает нормально, дайте мне подмножество списка.

Тем не менее, когда я нажимаю "Следующая страница", он дает мне весь список, страница № 2. Я знаю, что это потому, что он отправляет обратную передачу и связывает оригинальную команду выбора. Но как я могу сделать, чтобы дать мне подмножество списка, когда я нажимаю "Следующая страница"?

Спасибо!

ОБНОВЛЕНИЯ: если я изменю код на это:

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
  {
    SqlDataSource2.SelectCommand = "select * from manager";
    managerList.AllowPaging = true;
  }
}

это дает мне пустой список, когда я нажимаю на "следующую страницу".

может возникнуть соблазн добавить IsPostBack, но это не сработает.

5 ответов

Решение

Добавьте код NewPageIndex в событие PageIndexChanging:

managerList.PageIndex = e.NewPageIndex;
bindgrid();

Вы должны поместить свой код под !IsPostBack() в событии page_load. лайк...

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
  {
    SqlDataSource2.SelectCommand = "select * from manager";
    managerList.AllowPaging = true;
  }
}

Причина. Когда вы нажимаете кнопку "Далее", событие загрузки страницы вызывается до PageIndexChanging Обработчик событий Gridview.

Ниже может помочь вам

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
    {
    SqlDataSource2.SelectCommand = "select * from manager";
    managerList.AllowPaging = true;
    }

}

Сохраните самый последний запрос SQL в глобальной статической строке, а затем используйте следующий код.

static String previousSQL_Query;

protected void Page_Load(object sender, EventArgs e)
{
  if(IsPostBack)
  {
    SqlDataSource2.SelectCommand = previousSQL_Query;
  }
  else
  {
       SqlDataSource2.SelectCommand = "select * from manager";
       managerList.AllowPaging = true;
  }
}

protected void btnSearch_Click(object sender, EventArgs e)
{
    SqlDataSource2.SelectCommand = "select * from manager where age > 30";
    previousSQL_Query = SqlDataSource2.SelectCommand;
    managerList.DataBind();
}

Page_Load срабатывает каждый раз, когда страница загружается, включая обратную передачу, поэтому ваш оператор выбора получает сброс. Попробуйте установить значение viewstate, чтобы сохранить ваш оператор выбора.

Другие вопросы по тегам