【问题标题】:GridView Paging and SortingGridView 分页和排序
【发布时间】:2012-03-14 11:29:19
【问题描述】:

我有一个启用了分页和排序的 GridView 网络控件。我已将数据源绑定到 SqlDataSource。当我尝试更改页面索引或排序时,我收到“GridView 触发事件 [Sorting/PageIndexChanging] 未处理”错误。 SqlDataSource 不是已经具备处理这些事件的能力了吗?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@language = "C#" Debug="true" src="ServerCode/Default.cs" Inherits="Home.Default" %>
<html>
<head>
    <title>APTEIT Data Preview</title>
</head>
<body>
    <form id = "mainFrm" runat = "server">
        <div id = "headersDiv">
            <asp:Table id = "headerTbl" runat = "server">
            </asp:Table>
        </div>
        <div id = "dataDiv">
            <asp:GridView id = "dataTbl" runat = "server" 
                ShowHeader="false"
                AllowPaging="true"
                GridLines="None" 
                AlternatingRowStyle="altRow"
                PagerStyle="pager"
                PageSize="50"
                >
            </asp:GridView>
        </div>
    </form>
</body>
</html>

代码隐藏

SqlDataSource sqlData = new SqlDataSource("Hidden for security reasons");
Select(DataSourceSelectArguments.Empty);
dataTbl.DataSource = sqlData;
dataTbl.DataBind();
headerTbl.Rows.Add(new TableRow());

【问题讨论】:

  • 仅供参考:“数据呈现控件的默认分页选项不适用于处理大量数据,因为它的底层数据源控件检索所有记录,即使只显示数据的子集。在这种情况下,我们必须转向自定义分页。” asp.net/web-forms/tutorials/data-access/paging-and-sorting/…
  • 启用你的数据网格分页为真。
  • 在此处发布您的 gridview 的 aspx 源代码,以便我们为您提供帮助。
  • 您是否更改了默认DataSourceMode="DataSet"?如果设置为 DataReader,排序和分页将不起作用。
  • @nux 我已经添加了上面的代码。 DataSourceMode是设置在gridview还是sqldatasource?

标签: asp.net sorting gridview paging sqldatasource


【解决方案1】:

你必须重新绑定GridView:

private void BindData()
{
    SqlDataSource sqlData = new SqlDataSource("Hidden for security reasons");
    Select(DataSourceSelectArguments.Empty);
    dataTbl.DataSource = sqlData;
    dataTbl.DataBind();
    headerTbl.Rows.Add(new TableRow());
}

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

在标记中添加GridView:

OnPageIndexChanging="dataTbl_PageIndexChanging"

它应该可以工作。

【讨论】:

  • 成功了。谢谢!我是否必须对排序功能进行类似的处理?
  • 老实说,我没有这样做排序,我不知道,但可能是的。也许您需要在绑定数据之前对数据进行排序,因为我不知道GridView 是否自己这样做。试试看:)。
  • 还有一件事,我认为如果您使用在标记中创建的SqlDataSource 并将GridView 绑定到它而不是在后面的代码中,那么您将“开箱即用”进行排序和分页" 无需额外编码。
  • 嗯...好吧,我试图避免在标记方面做太多事情。我非常喜欢尽可能多地进行封装,因此我尝试将所有功能卸载到 .cs 脚本并使用 HTML 作为视图模板。不过,我会检查一下排序。再次感谢!
猜你喜欢
  • 2012-08-23
  • 1970-01-01
  • 2014-09-14
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2012-02-06
  • 1970-01-01
相关资源
最近更新 更多