Gridview动态绑定数据 分页问题(换页后,显示没有数据)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gridview动态绑定数据 分页问题(换页后,显示没有数据)?相关的知识,希望对你有一定的参考价值。

各位大虾们帮帮小弟吧!
因为我要做一个页面,左边全是导航LinkButton按钮,右边创建了一个GridView控件,然后点击不同的导航时,查询不同的表,动态的创建数据源绑定到GridView显示出来。最后调试时点击按钮后gridview正常显示数据,可是点击下一页,或是其他的换页按钮,都显示没有数据记录。我怀疑问题是不是:当我点击下一页时,刷行了页面,然后返回到我初始状态(即点击左边导航按钮之前的状态),初始状态下Gridview是没有绑定数据源的。

简单的模型代码如下:
前台代码:
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="b_Byx_id" AllowPaging="True" PageSize="5" OnPageIndexChanging="GridView1_PageIndexChanging"
>

<PagerSettings Mode="NextPreviousFirstLast" />
</asp:GridView>
 

</div>

<asp:Button ID="Button1" runat="server" Text="添加" OnClick="Button1_Click" />

</form>

后台代码:

public partial class test : System.Web.UI.Page

protected void Page_Load(object sender, EventArgs e)



protected void Button1_Click(object sender, EventArgs e)


SqlConnection con = DBconn.createCon();
con.Open();

SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = new SqlCommand("select *from b_Byx", con);
DataSet ds = new DataSet();
sda.Fill(ds, "t1");

GridView1.DataSource = ds.Tables["t1"];
BoundField b1 = new BoundField();
b1.HeaderText = "姓名";
b1.DataField = "b_Byx_id";
this.GridView1.Columns.Add(b1);
GridView1.DataBind();


protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

GridView1.PageIndex = e.NewPageIndex;

GridView1.DataBind();



这是我简化后的一个模型页面,我做的那个当然比这几个复杂多了,但是功能跟着这个是一样的。

真诚的期望大家帮忙解决问题啊! 这是我帮老师做的一个课题!所以希望大家尽快的帮忙解决,不甚感激!
首先要感谢大家的热心帮助!二楼的同志回答我在其他地方看到过,显然是从其他地方粘过来的。
问题已经解决了,在GridView1_PageIndexChanging 事件代码中,从新绑定了数据,
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

GridView1.PageIndex = e.NewPageIndex;
SqlConnection con = DBconn.createCon();
con.Open();

SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = new SqlCommand("select *from b_Byx", con);
DataSet ds = new DataSet();
sda.Fill(ds, "t1");

GridView1.DataSource = ds.Tables["t1"];
GridView1.DataBind();

这样子就好了。当然我不知道为什么要再从新读取数据绑定,我上面写的代码运行时,点下一页时页面回闪一下,之后就显示没数据,是不是那闪一下的页面就是新的页面。不知道为什么会这样?虽然问题解决了但是我还是感到疑惑,为什么换页之后还得从新读取数据。前面不是应经绑定好数据了吗?

邮箱:zhjx1987415@126.com

这种情况可以用ViewState。
ds刚读到值时就存到ViewState[""]中,添加时再更改ViewState。
grv的datasouce=ViewState[""]。
因为用户刷新页面,ViewState是保存原来的数据的,直到用户关闭页面。
ViewState详细用户自己上网搜搜
----------------------------
默认情况向,选择页时,GridView都会向服务器回发,所以会刷新的。
一般写个bind()方法(我就是这样用的),去执行Gridview的绑定。gridview重新绑定数据原时,可以直接bind();

也可以用Viewstate:我写了个简单的

protected void Button1_Click(object sender, EventArgs e)

string str=ConfigurationManager.ConnectionStrings["BlogDBConnectionString"].ConnectionString;
string sql = "select * from Admin";
SqlConnection conn = new SqlConnection(str);
conn.Open();

SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
sda.Fill(ds,"myTable");
ViewState["data"] = (DataTable)ds.Tables[0];

GridView1.DataSource = (DataTable)ViewState["data"];
GridView1.DataBind();


protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

GridView1.PageIndex = e.NewPageIndex;

GridView1.DataSource = (DataTable)ViewState["data"];
GridView1.DataBind();


我建议用bind(),如果数据很多的话,ViewState会很大的。
参考技术A using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Model;
using BLL;

public partial class Admin_LookGoods : System.Web.UI.Page


bool isone = false;
protected void Page_Load(object sender, EventArgs e)

if (Session["AdminName"] == null)

Response.Redirect("AdminLogin.aspx");

if (!Page.IsPostBack)

ViewState["id"] = Request.QueryString["id"];
ViewState["page"] = 0;
try

DBini();

catch

Response.Redirect("Order.aspx");




public void DBini()

DataTable dt;
if (isone == false)

dt = OrderGoodsBLL.GetAll(Convert.ToInt32(ViewState["id"].ToString()));

else

dt = OrderGoodsBLL.GetAllByTwo(Convert.ToInt32(ViewState["id"].ToString()), ViewState["name"].ToString());


GridView1.AllowPaging = true;
GridView1.PageSize = 9;
GridView1.PageIndex = Convert.ToInt32(ViewState["page"]);

GridView1.DataSource = dt;
GridView1.DataBind();


protected void Button1_Click(object sender, EventArgs e)

ViewState["name"] = TextBox1.Text;
isone = true;
DBini();

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

if (e.Row.RowType == DataControlRowType.DataRow)

((LinkButton)(e.Row.Cells[4].Controls[0])).Attributes.Add("onclick", "return confirm('确认要删除吗?')");



protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString());
OrderGoodsBLL.Delete(id);
DBini();

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

ViewState["page"] = e.NewPageIndex;
DBini();



------------------------------------------------------

上面代码帮不了你的话,
想要更灵活的查询并显示数据,请使用repeater加上aspnetpager

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela
参考技术B protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

GridView1.PageIndex = e.NewPageIndex;

GridView1.DataBind();

换个事件试试,pageindexchanged呢
pageload里加GridView1.DataBind();试试
参考技术C 告诉我你的邮件我给你发一份我还没做完的软件,但是GridView功能不少,分页的也有,希望能帮到你。

react antd Form 切换Table分页后Table内Input数据丢失问题处理

参考技术A 参考:
react antd Form 切换Table分页后Table内Input数据丢失问题处理 相关源码

以上是关于Gridview动态绑定数据 分页问题(换页后,显示没有数据)?的主要内容,如果未能解决你的问题,请参考以下文章

gridview 实现分页后发现数据丢失。(第二页点了之后没数据) 求指导,谢谢了!

jquery在ajax新加入的元素后绑定事件click

当内容'通过 AJAX 动态创建时,分页后不起作用

gridview分页不显示数据

jquery ajax 调用kkpager插件 异步加载重新生成分页后,点击页数还是跟首次加载一样

GridView如果被分页了,怎么获取所有页某一列的所有值。我用了SqlDataSource去绑定了数据源。