分页控件在 Gridview 中不可见

Posted

技术标签:

【中文标题】分页控件在 Gridview 中不可见【英文标题】:Paging controls not visible in Gridview 【发布时间】:2011-07-26 12:13:20 【问题描述】:

我在我的项目中为 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 控件并已设置其 DataSourceMode 属性到 DataReader, GridView 控件无法实现 分页。

我将 gridview 绑定到 linq 查询。

【问题讨论】:

【参考方案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();

【讨论】:

谢谢,贾斯汀。这看起来像很棒的信息。即将离开一段时间,所以我回来时会回顾并做出回应。不过感谢您的快速响应!

以上是关于分页控件在 Gridview 中不可见的主要内容,如果未能解决你的问题,请参考以下文章

向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作

asp.net中GridView怎样进行分页,编辑,删除操作

GridView 控件中使用 LinqDataSource 和分页的总行数

c# gridview 分页后根据内容改变字体颜色

gridview分页

[转]Oracle分页之三:利用PagerView来实现无刷新GridView