【问题标题】:GridView from CodeBehind in C# Paging not workingC# 分页中 CodeBehind 的 GridView 不起作用
【发布时间】:2011-07-10 15:01:27
【问题描述】:

当我单击 GridView 上的 > 时,它不会转到下一组记录。

        DataGrid dataGrid = new DataGrid();
        dataGrid.PageSize = 5;
        dataGrid.AllowPaging = true;
        dataGrid.EnableViewState = true;
        dataGrid.DataSource = customerDataTable;
        dataGrid.AllowPaging ();
        if (!IsPostBack)
        {
            dataGrid.DataBind();
        }

根据我的代码,它要么停留在前 5 个,要么不显示网格。

我已经尝试过在 IsPostBack 内外使用 DataBind()。

我也试过添加

        dataGrid.PageIndexChanged += new DataGridPageChangedEventHandler(dataGrid_PageIndexChanged);

    void dataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        DataGrid dg = (DataGrid)source;
        dg.DataBind();
    }

但我无法让它工作。我做错了什么?

谢谢!

【问题讨论】:

    标签: asp.net datagrid paging


    【解决方案1】:

    这是一个示例,我尝试重新创建您的场景并且它有效。看看吧。

    protected void Page_Load(object sender, EventArgs e)
    {
            GridView GridView1 = new GridView();
            Panel1.Controls.Add(GridView1);
            GridView1.DataSource = GetList();
            GridView1.AutoGenerateColumns = true;
            GridView1.EnableViewState = true;
            GridView1.AllowPaging = true;
            GridView1.PageSize = 4;
            GridView1.DataBind();
            GridView1.PageIndexChanging += new GridViewPageEventHandler(GridView1_PageIndexChanging);
    
    }
    
    void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        if (sender != null)
        {
            GridView GridView1 = sender as GridView;
            GridView1.PageIndex = e.NewPageIndex;
            GridView1.DataBind();
        }
    }
    
    
    
    public class Person
    {
        public String Name { get; set; }
        public int Age { get; set; }
    }
    private IEnumerable<Person> GetList()
    {
        List<Person> list = new List<Person>();
        list.Add(new Person() {Age = 12, Name = "asdfsd"});
        list.Add(new Person() {Age = 13, Name = "sdfsdaf"});
        list.Add(new Person() {Age = 14, Name = "zxczxv"});
        list.Add(new Person() { Age = 15, Name = "zxczxv" });
        list.Add(new Person() { Age = 16, Name = "zxczxv" });
        list.Add(new Person() { Age = 17, Name = "zxczxv" });
        return list;
    }
    

    在标记中你只需要拥有面板

    <asp:Panel ID="Panel1" runat="server">
    

    编辑:

    这是使用 DataGrid 的相同场景

    protected void Page_Load(object sender, EventArgs e)
    {
            DataGrid dataGrid = new DataGrid();
            Panel1.Controls.Add(dataGrid);
            dataGrid.DataSource = GetList();
            dataGrid.AutoGenerateColumns = true;
            dataGrid.EnableViewState = true;
            dataGrid.AllowPaging = true;
            dataGrid.PageSize = 4;
            dataGrid.DataBind();
            dataGrid.PageIndexChanged +=new DataGridPageChangedEventHandler(dataGrid_PageIndexChanged);
    
    }
    
    void dataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        if (source != null)
        {
            DataGrid dataGrid = source as DataGrid;
            dataGrid.CurrentPageIndex = e.NewPageIndex;
            dataGrid.DataBind();
        }
    }
    

    【讨论】:

    • 我明白了,“System.Web.UI.WebControls.DataGrid”不包含“PageIndex”的定义
    • @user390480 用于 DataGrid,请尝试使用 dataGrid.CurrentPageIndex
    • 好的,越来越近了。我可以前进,但不能后退。我没有 PageIndexChanging 事件。我只有一个 PageIndexChanged。
    • @user390480 PageIndexChanged 应该没问题。我尝试使用 DataGrid 而不是 GridView,我可以前进和后退。
    • 好吧,由于某种原因,当我点击
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多