我有一个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();
}
{
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();
}
{
this.GridView1.PageIndex = e.NewPageIndex;
this.GridView1.DataBind();
}
-----------------
问题在这里,this.GridView1.DataBind();
你每次翻页以后都是重新绑定的没有过滤过的数据,当然会出现这种情况
protected void Page_Load(object sender, EventArgs e)
{
BindDataCon();
BindData();
}
你每次postback以后,都重新绑定了两次,而且每次都是最后一次升交,也就是BindDate()的绑定数据有效
所以会出现上述情况
不能把绑定的代码放在page-load当中protected void Page_Load(object sender, EventArgs e)
{
if(!isPostback)
{
BindData();
}
}
2. 分页时需要调用你自定义的 BindDataCon() 而不是 Grid.DataBind()
{
BindDataCon();
BindData();
}protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.GridView1.BindDataCon();
(一) 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分别进行绑定。
With dgv物件一覧
imgbtn前頁Top.Enabled = .PageIndex > 0 AndAlso .PageCount > 1
imgbtn前頁bottom.Enabled = .PageIndex > 0 AndAlso .PageCount > 1
imgbtn次頁Top.Enabled = .PageIndex < .PageCount - 1
imgbtn次頁bottom.Enabled = .PageIndex < .PageCount - 1
End With
End Sub
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.Buttom1_Click(null,null)//筛选
}
{
if (!IsPostBack)
BindData();
}
{
BindDataCon();
BindData();
}
我觉得是Page_Load的时候发生错误,先执行BindDataCon();后执行BindData(); ,当然BindDataCon();就没有了,所以只能对所有数据进行分页.
学习ing.
{
BindDataCon();
BindData();
}
还有那个搜索条件
建议放到 session或viewstate里
加载的时候 搜索条件 清空了
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);
this.GridView1.DataSource = ds;
this.GridView1.DataBind(); cn.Close();
} protected void Button1_Click(object sender, EventArgs e)
{
ViewState["sqlwhere"]="num= " + this.DropDownList1.SelectedItem.Text ;
BindData();
} 希望对LZ有帮助
要不然,你分页的时候,怎么判断调用哪个函数呢,也就说你怎么知道有条件没条件呢。
2.感觉你的GridView1_PageIndexChanging函数没什么意义。你写的语句本来就是这个控件该做的事。
按照你的思路的解决方法是:
(1).把两个绑定函数整合成一个,在pageload里调用。
(2).在GridView1_PageIndexChanging函数里判断是否有条件,然后决定调用那个。
另在pageload里
if(!IsPostBack)
{
BindData();
}
就可以了
但这样会出现逻辑上的漏洞,即你的翻页看到可能不是你上一次查询的条件,它每次都是都是按照this.DropDownList1.SelectedItem.Text来决定的,建议按楼上的把查询语句或条件放在session或viewstate里