我为项目中的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查询。
答案 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();
}