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会很大的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-11
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
第2个回答  2010-10-11
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;

GridView1.DataBind();
}
换个事件试试,pageindexchanged呢
pageload里加GridView1.DataBind();试试
第3个回答  2010-10-15
告诉我你的邮件我给你发一份我还没做完的软件,但是GridView功能不少,分页的也有,希望能帮到你。

使用GridView自带分页,点击下一页的时候为什么显示空白
分页绑定是正确的 一般自带分页就是先设置GridView的allowpage=true \/\/分页功能数据绑定 protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){ GridView1.PageIndex = e.NewPageIndex;InitPage(); \/\/重新绑定GridView数据的函数 } protected void GridView1_PageIndexChange...

请问:GridView点击页码后不显示数据,一片空白,原因有哪些?
数据库中没有数据吧。再者,你没有将GridView数据显示的方法放到Page_load事件里面吧。或者GridView属性问题,你把GridView删掉,重新添加一个再试试。

gridview 实现分页后发现数据丢失。(第二页点了之后没数据) 求指导...
这里你不是用的自带的那个DataSource控件,所以这里直接用DataBind()重新绑定时没用的吧!你在GridView1_PageIndexChanging()方法里面应该把他的DataSource重设一次,然后再DataBind绑定一下。

问题C# asp.net gridview 查询后分页的问题 单击第二页时数据重新绑定了...
回答:常理说分页就那两句就够了沃!! 你那段查询的代码是在哪里用的??

Gridview绑定数据库,显示时缺少了一行数据,是怎么回事?
Gridview绑定的数据源 dataTable 重新遍历一下(重新组合一个新的Table),然后再绑定就OK了

asp.net C#中gridview的分页问题,请教。
在ASP.NET中,经常会使用到GridView的分页,一般情况下,若使用Visual Studio自带的数据源控件,不会出现什么问题。但是如果自己用代码设置GridView的数据源,GridView中第一页显示正常,这时如果点击第二页,则经常会出现如下错误 提示:GridView“GridView_test”激发了未处理的事件“PageIndexChanging”。这个...

gridview允许分页,但是当数据少于每页要求行数时,分页就没有了,而且...
跟你设置的每页显示的记录数有关系。如果你设置为10条,而只有五条记录。加载页面的时候分页是不显示的,但是应该可以设置的,设置为可见。

datagridview中发生以下异常 索引0没有值agridview中发生以下异_百度知 ...
动态添加数据:如果你是在运行时动态地向DataGridView添加数据,请确保在访问数据之前数据已正确添加。其他代码问题:检查其他与DataGridView相关的代码,看看是否有其他可能导致此问题的操作。关于“Application.Run(new MainForm());未将对象引用设置到对象实例”这个异常:检查与MainForm相关的所有代码,确保...

为什么gridview绑定数据了,但是无法编辑。应用的是动态数据绑定。(100...
事实上GridView功能还好,但是效率比较低,实际项目中使用较少 尤其是启动分页的时候GridView几乎不能满足现实需求,这和GridView的分页机制有关。推荐使用Repeater做数据显示,然后使用ASPNETPager做分页,既美观又高效率。

为什么循环GridView只能找到当前页的数据
GridView只会从你绑定的数据源中显示出你设定的显示数据条数,其他的是不会加载在gridview中的,所以,如果你要在gridview中是无法找到未显示的数据的。如果你要查找未显示的数据的话,你需要通过gridview的datasource 属性去查找

相似回答