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

各位大虾们帮帮小弟吧!因为我要做一个页面,左边全是导航LinkButton按钮,右边创建了一个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
展开
 我来答
XCExceXCExce
推荐于2016-11-06 · TA获得超过647个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:336万
展开全部
这种情况可以用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会很大的。
陈学阳
2010-10-11 · TA获得超过2.8万个赞
知道大有可为答主
回答量:2.1万
采纳率:14%
帮助的人:5615万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leishenql
2010-10-11 · TA获得超过453个赞
知道小有建树答主
回答量:869
采纳率:0%
帮助的人:602万
展开全部
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;

GridView1.DataBind();
}
换个事件试试,pageindexchanged呢
pageload里加GridView1.DataBind();试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zzh1922
2010-10-15
知道答主
回答量:5
采纳率:0%
帮助的人:7348
展开全部
告诉我你的邮件我给你发一份我还没做完的软件,但是GridView功能不少,分页的也有,希望能帮到你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式