日期:2014-05-18  浏览次数:20479 次

一个gridview分页问题--郁闷了好久
我有一个gridview表用来显示所有的数据,对它进行了分页,能够正常实现。但我通过某一个条件进行数据筛选后将符合条件的数据仍旧绑定到这个Gridview中,这时进行上一页或下一页的操作,数据却又会重新绑定所有数据,而不是筛选后的数据。我的具体代码如下,BindData()用来绑定所有数据,BindDataCon()用来绑定筛选后的数据。这时所有数据显示时的分页能够实现,而按条件筛选出后的数据分页不能进行,当进行上一页或下一页的操作时gridview会绑定所有的数据。请问问题在哪里,怎样才能实现两个数据绑定到同一个gridview表,而分别能够实现分页。

protected void Page_Load(object sender, EventArgs e)
  {
  BindDataCon(); 
  BindData();
  }

  private void BindData()
  {
  SqlConnection cn = new SqlConnection("server=(local);database=test;Trusted_Connection=yes");
  cn.Open();

  SqlDataAdapter sda = new SqlDataAdapter("select * from tt", cn);
  DataSet ds = new DataSet();
  sda.Fill(ds);
  this.GridView1.DataSource = ds;
  this.GridView1.DataBind();

  cn.Close();
  }

  private void BindDataCon()
  {
  SqlConnection cn = new SqlConnection("server=(local);database=test;Trusted_Connection=yes");
  cn.Open();

  SqlDataAdapter sda = new SqlDataAdapter("select * from tt where num='" + this.DropDownList1.SelectedItem.Text + "'", cn);
  DataSet ds = new DataSet();
  sda.Fill(ds);
  this.GridView1.DataSource = ds;
  this.GridView1.DataBind();

  cn.Close();
  }
  protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
  {
  this.GridView1.PageIndex = e.NewPageIndex;
  this.GridView1.DataBind();
  }
  protected void Button1_Click(object sender, EventArgs e)
  {
  BindDataCon();
  }
  protected void LinkButton1_Click(object sender, EventArgs e)
  {
  BindData();
  }

------解决方案--------------------
我觉得问题出在两个地方:
(一) protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 

this.GridView1.PageIndex = e.NewPageIndex; 
this.GridView1.

就算你筛选后还是绑定了DataBind()。
(二)protected void Page_Load(object sender, EventArgs e) 

BindDataCon();
BindData(); 

我觉得还是用两个GRIDVIEW分别进行绑定。
------解决方案--------------------
2次绑定放在一个方法里,定义一个viewstate["sqlwhere"],存放条件
protected void Page_Load(object sender, EventArgs e) 

if(!IsPostBack) 
{
ViewState["sqlwhere"]="";
BindData(); 
}


private void BindData() 

string sqlwhere=ViewState["sqlwhere"].ToString();

SqlConnection cn = new SqlConnection( "server=(local);database=test;Trusted_Connection=yes "); 
cn.Open(); 
if (sqlwhere=="")
{
SqlDataAdapter sda = new SqlDataAdapter( "select * from tt ", cn); 
}
else
{
SqlDataAdapter sda = new SqlDataAdapter( "select * from tt where " + sqlwhere, cn); 
}
DataSet ds = new DataSet(); 
sda.Fill(ds);