分页控件在Gridview中不可见

时间:2011-03-30 23:35:42

标签: asp.net visual-studio-2010 gridview paging

我为项目中的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 个答案:

答案 0 :(得分: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();
}