DataGrid与DataSet重新挷定后的数据显示问题

我用datagrid与dataset挷定,还没有输入查询条件以前,界面显示全部记录,输入查询条件以后通过设置RowFilter,显示过滤后的数据。有一个问题,就是输入查询条件后datagrid马上显示的是正确的信息,就是过滤后的页数。但是当按了“下一页”,“最后一页”等按钮后,datagrid显示的数据马上就变回第一次挷定时(全部记录)的情况了。代码如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace hero
{
///

1<summary>   
2/// OperatorManageWebForm 的摘要说明。   
3/// </summary>

public class OperatorManageWebForm : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox queryUsername;
protected System.Web.UI.WebControls.Button btnQuery;
protected System.Web.UI.WebControls.DataGrid DataGridAccount;
protected System.Web.UI.WebControls.DropDownList lstQueryBy;
protected System.Web.UI.WebControls.HyperLink AddOperator;
protected System.Web.UI.WebControls.LinkButton lbPrev;
protected System.Web.UI.WebControls.LinkButton lbNextPage;
protected System.Web.UI.WebControls.LinkButton lbFirst;
protected System.Web.UI.WebControls.LinkButton lbLast;
protected System.Web.UI.WebControls.Label lblPageCount;
protected System.Web.UI.WebControls.Label lblCurrentPageIndex;
protected System.Web.UI.WebControls.Label Label1;

protected DataSet ds = new DataSet();
protected SqlDataAdapter adapter = new SqlDataAdapter( "select * from TAB_OP_ACCOUNT", DataAction.conn );
protected DataTable dt = new DataTable( "QueryResult" );
protected string RowFilter = "";

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
// 判断操作员有没有登陆;
if( Session["Operator"] == null )
{
//Response.Write( "

1<script>alert('你还没有登陆!');</script>

" );
Response.Redirect( "OperatorLoginWebForm.aspx" );
}

adapter.Fill( ds, "QueryResult" );
dt = ds.Tables["QueryResult"];

if( !this.IsPostBack )
{
this.BindGrid( RowFilter );
}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///

1<summary>   
2/// 设计器支持所需的方法 - 不要使用代码编辑器修改   
3/// 此方法的内容。   
4/// </summary>

private void InitializeComponent()
{
this.lbLast.Click += new System.EventHandler(this.lbLast_Click);
this.lbFirst.Click += new System.EventHandler(this.lbFirst_Click);
this.lbNextPage.Click += new System.EventHandler(this.lbNextPage_Click);
this.lbPrev.Click += new System.EventHandler(this.lbPrev_Click);
this.btnQuery.Click += new System.EventHandler(this.btnQuery_Click);
this.DataGridAccount.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGridAccount_PageIndexChanged);
this.DataGridAccount.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGridAccount_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

/下一页**************************/
private void lbNextPage_Click(object sender, System.EventArgs e)
{
if( this.DataGridAccount.CurrentPageIndex < this.DataGridAccount.PageCount-1 )
{
this.DataGridAccount.CurrentPageIndex += 1;
this.BindGrid( RowFilter );
}
}

/上一页**********************/
private void lbPrev_Click(object sender, System.EventArgs e)
{
if( this.DataGridAccount.CurrentPageIndex > 0 )
{
this.DataGridAccount.CurrentPageIndex -= 1;
this.BindGrid( RowFilter );
}
}

/第一页***********************/
private void lbFirst_Click(object sender, System.EventArgs e)
{
this.DataGridAccount.CurrentPageIndex = 0;
this.BindGrid( RowFilter );
}

/最后一页***********************
---------------------------------------------------------------

关健在于 RowFilter 变量的问题, 当单击查询按钮时, 会执行 btnQuery_Click 方法, 这时RowFilter 变量已经保存了相关的条件, 但是当点击下一页进, btnQuery_Click 方法并没有执行了, RowFilter 被重新被始化(每次回传这个变量都会重新被始的), 所以RowFilter的值又变成 "" 了

解决方法:

把 RowFilter 变量改成使用 ViewState 来保存查询条件, 如:

把你的btnQuery_Click 改成:
ViewState["RowFilter"] = "O_ID like '%" + this.queryUsername.Text + "%'";
this.BindGrid( ViewState["RowFilter"] );

在每个调用 BindGrid 的方法地方改成 BindGrid(ViewState["RowFilter"]);

ViewState 跟 Session 有点像, 但是他只能在本页传数据, 而不能跨页的传数据, 详细的请看MSDN.

Published At
Categories with Web编程
Tagged with
comments powered by Disqus