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
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 实现分页后发现数据丢失。(第二页点了之后没数据) 求指导,谢谢了!