C# 分页中 CodeBehind 的 GridView 不起作用

Posted

技术标签:

【中文标题】C# 分页中 CodeBehind 的 GridView 不起作用【英文标题】:GridView from CodeBehind in C# Paging not working 【发布时间】: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();
    

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

谢谢!

【问题讨论】:

【参考方案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,我可以前进和后退。 好吧,由于某种原因,当我点击

以上是关于C# 分页中 CodeBehind 的 GridView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Datagrid分页排序删除代码

Asp +Js 无刷新分页

ASP.NET分页控件

C# 文件(CodeBehind 类)从 Visual Studio 中的项目中消失 - Xamarin

bootstrap modal popup c# codebehind

C# (ASP.Net) 将选择值链接到 Codebehind 中的常量