一个gridview分页问题--郁闷了好久

kylewell 2007-09-29 11:00:28
我有一个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();
}
...全文
347 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjc_333 2010-03-10
  • 打赏
  • 举报
回复
顶!!!!!!!!!
ycwxue 2007-10-31
  • 打赏
  • 举报
回复
呵呵..顶顶
truecoffeefox 2007-10-31
  • 打赏
  • 举报
回复
postback
baiyicug 2007-10-31
  • 打赏
  • 举报
回复
1.楼主每次进入页面都进行了两次绑定,浪费。而且你这两个函数就不能用一个解决吗,加个判断而已。
要不然,你分页的时候,怎么判断调用哪个函数呢,也就说你怎么知道有条件没条件呢。
2.感觉你的GridView1_PageIndexChanging函数没什么意义。你写的语句本来就是这个控件该做的事。
按照你的思路的解决方法是:
(1).把两个绑定函数整合成一个,在pageload里调用。
(2).在GridView1_PageIndexChanging函数里判断是否有条件,然后决定调用那个。
另在pageload里
if(!IsPostBack)
{
BindData();
}
就可以了

但这样会出现逻辑上的漏洞,即你的翻页看到可能不是你上一次查询的条件,它每次都是都是按照this.DropDownList1.SelectedItem.Text来决定的,建议按楼上的把查询语句或条件放在session或viewstate里
scjtswj 2007-10-31
  • 打赏
  • 举报
回复
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);
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有帮助
kings2015 2007-10-31
  • 打赏
  • 举报
回复
if(!IsPostBack)
{
BindDataCon();
BindData();
}
还有那个搜索条件
建议放到 session或viewstate里
加载的时候 搜索条件 清空了
2004v2004 2007-10-28
  • 打赏
  • 举报
回复
顶下
kylewell 2007-09-29
  • 打赏
  • 举报
回复
还没找到结解决的办法,帮忙啊
kylewell 2007-09-29
  • 打赏
  • 举报
回复
不是IsPostBack问题
SDFDSAC 2007-09-29
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
BindData();
}
oneforall 2007-09-29
  • 打赏
  • 举报
回复
楼上的已经说了,但是你按钮点击事件没有给出筛选条件,你这是用代码绑定的,在分页事件中应该这样写
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.Buttom1_Click(null,null)//筛选
}
landy543210 2007-09-29
  • 打赏
  • 举报
回复
Private Sub ボタン設定_前頁次頁()
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
yzh0313 2007-09-29
  • 打赏
  • 举报
回复
我觉得问题出在两个地方:
(一) 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分别进行绑定。
xuan.ye 2007-09-29
  • 打赏
  • 举报
回复
if(!ispostback)
{
BindDataCon();
BindData();
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.GridView1.BindDataCon();
kylewell 2007-09-29
  • 打赏
  • 举报
回复
楼上的都提出了问题的原因,这个我知道,就是不知道解决的方法,希望能给我解决的方法
nchen123 2007-09-29
  • 打赏
  • 举报
回复
1. 页面初次加载时绑定要写在 if (!IsPostBack) {} 中;
2. 分页时需要调用你自定义的 BindDataCon() 而不是 Grid.DataBind()
symbol441 2007-09-29
  • 打赏
  • 举报
回复
一般我们在做条件过滤时多采用DropDownList1_SelectedIndexChanged事件进行实现,在这个事件中去实现动态绑定方能实现
不能把绑定的代码放在page-load当中

protected void Page_Load(object sender, EventArgs e)
{
if(!isPostback)
{
BindData();
}
}

爱鱼的浩子 2007-09-29
  • 打赏
  • 举报
回复
出错原因在Page_Load的时候,因为你加载的时候又绑定了,所以不会出现分页的情况
symbol441 2007-09-29
  • 打赏
  • 举报
回复
错了,应该是这里
protected void Page_Load(object sender, EventArgs e)
{
BindDataCon();
BindData();
}
你每次postback以后,都重新绑定了两次,而且每次都是最后一次升交,也就是BindDate()的绑定数据有效
所以会出现上述情况
xuyiazl 2007-09-29
  • 打赏
  • 举报
回复


能发图片了?》???
加载更多回复(3)

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧