【问题标题】:add pagination to gridview asp.net将分页添加到 gridview asp.net
【发布时间】:2016-09-30 08:25:17
【问题描述】:

我想要做的是进行分页以清晰地查看数据。 这是我的gridview html代码:

<asp:gridview ID = "grid" runat="server"  AllowPaging="true" OnPageIndexChanging="gdview_PageIndexChanging">

和后面的代码:

public static string cs = "Server=PAULO;Database=ShoppingCartDB;Integrated Security=true";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["New"] != null)
        {
            if (!IsPostBack)
            {
                SqlConnection con = new SqlConnection(cs);
                con.Open();

                string sql = "SELECT * FROM CustomerDetails Where CustomerName = '" + Session["New"] +"'";
                SqlDataAdapter da = new SqlDataAdapter(sql, con);
                DataTable dt = new DataTable();
                da.Fill(dt);




                Label2.Text += Session["New"].ToString();
                linkLogout.Visible = true;
                //linkOrderHistory.Visible = true;
                Label2.Visible = true;
                linkViewProfile.Visible = true;
                grid.DataSource = dt;
                grid.DataBind();
            }
        }

    }
    private void CustomBindData()
    {
        SqlConnection con = new SqlConnection(cs);
        con.Open();

        string sql = "SELECT * FROM CustomerDetails Where CustomerName = '" + Session["New"] + "'";
        SqlDataAdapter da = new SqlDataAdapter(sql, con);
        DataTable dt = new DataTable();
        da.Fill(dt);
    }
    protected void gdview_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        CustomBindData();
        grid.PageIndex = e.NewPageIndex;
        grid.DataBind();
    }

不知何故,我的代码无法正常工作。它有页面,但是当我点击第 2 页时,没有显示任何数据。我认为这与我如何从 sql 获取数据有关。这有什么技巧吗?

【问题讨论】:

  • 将数据绑定部分放在一个函数中,并在两个地方调用,一个在加载过程中,一个在grid.DataBind()之前的pageIndexChanging旁边;
  • 不够,需要在自定义函数中设置source
  • @ARUN 我错过了什么?
  • 是的先生@ARUN谢谢你:)
  • @ARUN 先生,您能帮我解决这个问题吗? stackoverflow.com/questions/37562604/…

标签: c# asp.net gridview pagination page-index-changed


【解决方案1】:

不是这个

protected void gdview_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    grid.PageIndex = e.NewPageIndex;
    grid.DataBind();
}

使用以下..在页面加载中将数据源存储到您用于网格视图的会话并执行以下操作,

Session[gridviewsouce] = dt; //dataTable which you were using in page_load

并在页面索引更改功能..

protected void gdview_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    grid.PageIndex = e.NewPageIndex;
    DataTabel dt = Session[gridviewsouce] as DataTable;
    grid.DataSource = dt;
    grid.DataBind();
}

【讨论】:

  • 不要在 session 中存储大量数据,使用 viewstate[],服务器内存可能会很快耗尽
  • @ARUN,服务器内存有限制吗?只是澄清一下?
  • 是的,取决于服务器,有时在google专用服务器上从2GB到26GB,有分页和其他机制来克服这个限制,但是速度会随着硬盘用于制作而降低虚拟内存..就像那样..简单地说,有限制
【解决方案2】:

我加了

private void CustomBindData()
    {
        SqlConnection con = new SqlConnection(cs);
        con.Open();

        string sql = "SELECT * FROM CustomerDetails Where CustomerName = '" + Session["New"] + "'";
        SqlDataAdapter da = new SqlDataAdapter(sql, con);
        DataTable dt = new DataTable();
        da.Fill(dt);

        grid.DataSource = dt;
        grid.DataBind();
    }
    protected void gdview_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        CustomBindData();
        grid.PageIndex = e.NewPageIndex;
        grid.DataBind();
    }

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2010-12-23
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多