GridView 'GridView1' 触发了未被处理的 PageIndexChanging 事件

14

我已经创建了:

  • 一个称为“详情”(Detail)的主页面和内容页面。
  • 在按钮单击事件中,展示数据在网格视图中。
  • 在网格视图中,列是自动生成的。
  • 我想在网格视图中显示11列,但这超出了页面大小。

怎么办?

我已经为数据库连接代码创建了sql helper文件,并调用该方法,而不是使用sqldatasource进行连接。

当我尝试进行分页时,出现错误

GridView 'GridView1'引发了未处理异常PageIndexChanging。

5个回答

25

你需要在代码后台声明一个方法来处理PageIndexChanging事件。

类似于这样:

protected void GridView1_PageIndexChanging (object sender, GridViewPageEventArgs  e)
{
    GridView1.PageIndex = e.NewPageIndex;
    bindGridView(); //bindgridview will get the data source and bind it again
}

private void bindGridView()
{
     GridView1.DataSource=getData();
     GridView1.DataBind();
}

提供示例代码:
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        bindGridView(); //bindgridview will get the data source and bind it again
    }

    protected void Page_Load(object sender , EventArgs e)
    {
        if(!IsPostBack)
         bindGridView();

    }
    //this is some sample data 
    private void bindGridView()
    {
        DataTable t = new DataTable();
        t.Columns.Add("Col1");
        t.Columns.Add("Col2");
        DataRow r = null;
        for (int i = 0; i < 25; i++)
        {
            r = t.NewRow();
            r.ItemArray = new object[] { "Val" + i, " Another " + i };
            t.Rows.Add(r);
        }
        GridView1.DataSource = t;
        GridView1.DataBind();
    }

这是标记:

<asp:GridView OnPageIndexChanging="GridView1_PageIndexChanging" AllowPaging="true" PageSize="10" ID="GridView1" runat="server" AutoGenerateColumns="true">

将会产生这个效果:

输入图片描述


我已经完成,但没有效果。protected void GridView1_PageIndexChanging(object sender,GridViewPageEventArgs e) { //string s1 =“select * from master”; //DataSet ds = SqlHelper.GetDataSet(CommandType.Text,s1,“master”); //DataTable table = ds.Tables [“master”]; //if(table.Rows.Count> 0) //{ // GridView1.DataSource = ds; // GridView1.DataBind(); //} GridView1.PageIndex = e.NewPageIndex; //绑定网格 GridView1.DataBind();} 以及aspx文件 - Jui Test
@JuiTest请将此代码发布到您的答案中,而不是作为评论。在那里看到它更有帮助。 - Icarus
我无法回答自己的问题。 - Jui Test
@JuiTest 抱歉,我的意思是将此代码添加到您自己的问题中。 - Icarus

3

对于分页,您可以使用OnPageIndexChanging来实现....

例如

您需要在GridView中使用OnPageIndexChanging="gvdetails_PageIndexChanging"...

您需要在代码后台的事件中编写以下代码

protected void gvdetails_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvdetails.PageIndex = e.NewPageIndex;
    BindData();
}

如果需要更多细节,您可以查看下面的链接。在我的文章中,我使用了PageIndexChange...

这里我使用了PageIndexChange

希望这能帮助到您...请分享给其他人...谢谢!


1
你只需将此代码添加到你的程序中:

you simply add this to your code :

protected void GridViewTrsEmail_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridViewTrsEmail.PageIndex = e.NewPageIndex;
    GridViewTrsEmail.DataBind();


}

1
这是最终答案:
Imports System.Collections.Generic ' library

Protected Sub grdEmployees_PageIndexChanging1(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewPageEventArgs) Handles grdEmployees.PageIndexChanging
    grdEmployees.PageIndex = e.NewPageIndex
    LoadEmployeeList() 'FUNCTION FOR DATASET
    grdEmployees.DataBind()

End Sub

0
为了解决这个问题,我必须仔细查看我的数据源和数据键。我有一组从SQL Server返回的记录,我所做的是将它们绑定到一个POCO上。这个类有几个公共属性,类型为整数。这些整数是我的网格上的数据键。我将它们的类型替换为字符串,以避免强制转换问题。

这可能会成为更好的评论。它对已接受的答案没有太多的补充。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接