分页控件在 Gridview 中不可见

问题描述 投票:0回答:1

我在项目中为 gridview 设置了AllowPaging = True。 当我绑定它时,我知道我返回了 100 多行,并且 PageSize 设置为 50。但是我在底部没有看到任何分页控件(这就是它的显示方式)。

<asp:GridView ID="GridView1" runat="server" BackColor="White" 
    BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
    GridLines="Vertical"  OnRowDataBound="GridView1_RowDataBound" onselectedindexchanged="GridView1_SelectedIndexChanged" 
    AlternatingRowStyle-BackColor="#f0f1f3" AutoGenerateColumns="False" 
    AllowPaging="True" AllowSorting="True" PageSize="50" >

我无法通过搜索找到任何有帮助的东西。 任何人对可能导致 gridview 不渲染分页控件的原因有任何想法吗?

谢谢。

编辑:我认为原因可能与MSDN中的此信息有关:

2.如果GridView控件绑定的数据源控件没有 支持寻呼功能 直接,或者如果 GridView 控件 绑定到代码中的数据结构 通过 DataSource 属性, GridView控件将执行分页 通过获取所有数据记录 从源头看,只显示 当前页面的记录,以及 丢弃其余的。这是支持的 仅当数据源为 GridView 控件返回一个集合 实现 ICollection 接口(包括数据集)。

注意如果数据源没有 直接支持分页,不支持 实现 ICollection 接口, GridView 控件无法分页。为了 例如,如果您正在使用 SqlDataSource 控件并已设置其 DataReader 的 DataSourceMode 属性, GridView控件无法实现 寻呼。

我将 gridview 绑定到 linq 查询。

asp.net visual-studio-2010 gridview pagination
1个回答
1
投票

请参考此页面:
http://www.dbtutorials.com/display/linq-to-sql-paging-cs.aspx

如果您使用的是 ObjectDataSource,请参阅此:
http://www.devtoolshed.com/content/gridview-objectdatasource-linq-paging-and-sorting

OR 如果您设置不使用数据源对象,则可以将 LINQ 查询转换为数据表并绑定到该表;数据表确实支持分页。下面是包含将 LINQ 查询转换为数据表所需代码的页面:
http://www.c-sharpcorner.com/UploadFile/VIMAL.LAKHERA/LINQResultsetToDatatable06242008042629AM/LINQResultsetToDatatable.aspx

如果您采用第二种方式,那么当您第一次从(SQL)服务器中提取数据表时,您将需要缓存数据表,除非您想在每次用户切换页面时重新查询服务器。 GridView 事件的代码如下:

编辑:我修复了下面的 LoadData() 方法。

private DataTable CachedDataTable
{
    get
    {
        try
        {
            return (DataTable) Session["CachedDataTable"];
        }
        catch
        {
            return null;
        }
    }
    set
    {
        Session["CachedDataTable"] = value;
    }
}

private void LoadData()
{
    CachedDataTable = YourLinqQueryHere();
    gvGrid.DataSource = CachedDataTable;
    gvGrid.DataBind();
}

protected void gvGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvGrid.PageIndex = e.NewPageIndex;
}

protected void gvGrid_PageIndexChanged(object sender, EventArgs e)
{
    gvGrid.DataSource = CachedDataTable;
    gvGrid.DataBind();
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.