我有一个 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,但这不起作用。
在PageIndexChanging事件中添加NewPageIndex代码:
managerList.PageIndex = e.NewPageIndex;
bindgrid();
以下内容可能对你有帮助
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlDataSource2.SelectCommand = "select * from manager";
managerList.AllowPaging = true;
}
}
您需要将代码放在 page_load 事件中的
!IsPostBack()
下。就像...
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
SqlDataSource2.SelectCommand = "select * from manager";
managerList.AllowPaging = true;
}
}
原因: 每当您点击“下一步”按钮时,页面加载事件都会在 Gridview 的
PageIndexChanging
事件处理程序之前调用。
Page_Load 每次加载页面时都会触发,包括回发,因此您的 select 语句将被重置。尝试设置一个视图状态值来保留您的选择语句。
将最近的 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();
}