asp.net gridview динамически связывает - PullRequest
1 голос
/ 30 июня 2011

У меня есть 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 ]

2 голосов
/ 30 июня 2011

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

managerList.PageIndex = e.NewPageIndex;
bindgrid();
1 голос
/ 30 июня 2011

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

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

}
1 голос
/ 30 июня 2011

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

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

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

0 голосов
/ 06 июня 2014

Сохраните самый последний запрос 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();
}
0 голосов
/ 30 июня 2011

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

...