Estoy tratando de usar un DataPager para hacer paginación del lado del servidor. Aquí está mi código¿Cómo uso un DataPager con paginación del lado del servidor?
<asp:DataPager ID="pgrFooBars" PagedControlID="lvFooBars"
QueryStringField="page" runat="server" >
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
Código Detrás
protected void Page_Load(object sender, EventArgs e)
{
ConfigureBlogPostListView();
}
private void ConfigureBlogPostListView()
{
int pageNum;
int.TryParse(Request.Params["page"], out pageNum);
int pageSize = 20;
PagedList<IFooBar> FooBars = FooService.GetPagedFooBars(
new PagingSettings(pageNum, pageSize));
ListViewPagedDataSource ds = new ListViewPagedDataSource();
ds.AllowServerPaging = true;
ds.DataSource = FooBars;
ds.MaximumRows = pageSize;
ds.StartRowIndex = pageNum;
//TotalCount is the total number of records in the entire set, not just those loaded.
ds.TotalRowCount = FooBars.TotalCount;
lvFooBars.DataSource = ds;
lvFooBars.DataBind();
pgrFooBars.PageSize = pageSize;
pgrFooBars.SetPageProperties(pageNum, FooBars.TotalCount, true);
}
PagedList proviene de post útil de RobConery http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/.
El problema es que el DataPager parece estar usando la propiedad Count del ListView para determinar el número total de registros, que en este caso es 20. De alguna manera, necesita saber que hay 1,500, no 20 registros totales . El DataPager tiene una propiedad TotalRowCount, pero esta es de solo lectura.
Nunca he visto un ejemplo de DataPager con paginación del lado del servidor, pero supuse que podría hacer paginación del lado del servidor; de lo contrario, ¿de qué sirve el atributo QueryStringField?
Soy consciente de que puede hacer una solución de paginación personalizada utilizando la metodología 4GuysFromRolla aquí http://www.4guysfromrolla.com/articles/031506-1.aspx, pero primero me gustaría saber si es posible una solución con el DataPager antes de crear una solución personalizada.
ACTUALIZACIÓN Cuanto más miro esto, más que estoy llegando a la conclusión de que esto no es posible y que, por desgracia, la DataPager es un control destinado únicamente para sitios web pequeños. Lo que quiero hacer realmente debería ser bastante simple si el control se construyó correctamente. Quiero ser capaz de decir
dpFooBars.TotalRowCountComputed = false;
dpFooBars.TotalRowCount = AnyNumberThatISoChoose;
que he estado buscando desde hace algún truco para obtener el mismo resultado, pero parece que TotalRowCount del DataPager se calcula a partir del número real de elementos de la fuente de datos que está destinado a . Me parece muy extraño que Microsoft creara una clase ListViewPagedDataSource() y un DataPager al mismo tiempo y no los hiciera funcionar correctamente juntos, pero esto parece haber sido lo que sucedió.
ACTUALIZACIÓN 2 (AHA momento?) Parece que ha sido posible hacer la paginación del lado del servidor desde .Net 2.0 mediante un ObjectDataSource y personalizar el SelectCountMethod(). Creo que debería ser posible personalizar ObjectDataSource para satisfacer mis necesidades. Hmmm. Me voy a ir por el fin de semana, así que me tomará un par de días ver si esto funciona. Estén atentos, verdaderos creyentes.
¿Tu aplicación es la aplicación webform o Asp.Net MVC? – Sharique