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, чтобы сохранить ваш оператор выбора.