lunes, 30 de julio de 2007

Paginacion Numerica y Alfabeticamente en GridView

Va.....tu jefe te pide que ordenes los datos alfabeticamente en una grilla....chevere en el articulo anterior postie un ejemplo de como hacerlo (copia y pega y ya esta)....pero no ! por q' me puso la interrogante que si listas 100 productos que empiezan con "A" la lista es muy larga y solo quiere verlo de 15 en 15 tons que se hace?...se pagina alfabeticamente y se enumera los bloques de datos .....(q' cargoso de jefe).....ahora yo me pongo la interrogante.. si lo hago como el ejemplo del post anterior con sentencia select staria facil pero es con procedimiento almacenado y esta en una funcion que me retorna un dataset....lo primero que se me vino ala cabeza es igualarlo aun DataView y hacer un RowFilter para filtrar por la letra seleccionada en el Footer del gridView ....facil verdad y sí sale... me muestra los datos por la letra seleccionada y paginado enumericamente....pero.... siempre con los peros ......ocurre que un DataView no hace select... como asi que es eso no entiendo...bueno ahi explicare un poco:
pasa que cuando en el DataView cargas un DataSet on un DataTable sigue manteniendo los datos del DataSet o del DataTable por mas veces que ayas hecho RowFilter...y aun si ah ese DataView ya Filtrado lo iguales ah Otro DataView para con ese hacer la paginacion con numeros aun asi siguen los datos del DataSet o del DataTable......y los datos filtrados ah donde se van...? solo se muestran en el GridView y por el GridView no puedes paginar numericamente(solo se pagina con una fuente de datos no con un control)....bien! descartado el DataView....ahora buscar una clase de datos que me permita hacer un select,.....bueno yo solo conosco 2 fuentes de datos,,......DataSet y DataTable.....como segunda alternativa probe con el DataTable....como lei en la documentacion del DataTable es una estructura de tablas osea que contiene filas, columnas, registros,claves primarias, foren key y segun los conocientos que tenemos ah una tabla se le puede hacer un select tons dije q' de seguro salia con el DataTable y fue sierto me salio pues....lo que hice es recuperar el DataSet en un DataTable y ya no en el DataView,........de ahi en el momento de hacer el filtrado declare otro DataTable que recupera la esctructura del primer DataTable ojo solo la estructura no todo la tabla....y le hago el select al primer DataTable y segun los datos que coincidan va llenando al segundo DataTable y ya con eso hago paginacion numerica y alfabeticamente en un GridView y ahora se preguntaran por q' hago todo eso como dije anteriormente q' solamente con dataview sale y es mas facil......el problema surge cuando quiero seleccionar una fila y capturar sus valores como para mostrar un detalle, pues por eso utilize el DataTable por que ya les explique la limitacion del DataView.....






Descargar Fuente :PruebaPaginacionAlfaNumericDataTableDataView.rar







2 comentarios:

Anónimo dijo...

Hola JhofranSoft, realicé el ejemplo que tu posteaste pero yo lo hice en c# t tengo problemas al seleccionar una fila del gridview si pagino el mismo desde las letras(me trae siempre el registro correspondiente en la primera página del gridview), si lo pagino desde los numeros no tengo problema seleccionando me selecciona el registro no importa en la página que me encuentre. Te dejo mi codigo por si acaso me puedes ayudar estoy desesperado.

protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack==true)
{
BindData();
}
}

private void BindData()
{
DataSet ds = importSet.GetUsers();
gv_users.DataSource = ds;
gv_users.DataBind();
}

protected void gv_users_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Footer)
{

TableCell cell = e.Row.Cells[0];
cell.ColumnSpan = 3;
cell.Controls.Clear();
for (int i = 65; i <= (65 + 25); i++)
{
LinkButton lb = new LinkButton();

lb.Text = Char.ConvertFromUtf32(i) + " ";
lb.CommandArgument = Char.ConvertFromUtf32(i);
lb.CommandName = "AlphaPaging";
cell.Controls.Add(lb);

}
}
}

protected void gv_users_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("AlphaPaging"))
{
DataSet ds = importSet.GetUsersLetra(e.CommandArgument.ToString());
gv_users.DataSource = ds;
gv_users.DataBind();

}
}

protected void gv_users_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow row = gv_users.SelectedRow;
txtNombre.Text =row.Cells[1].Text;
txtId.Text = row.Cells[0].Text;
gv_users.Visible = false;


}

Gracias.

Anónimo dijo...

lo que yo queria, gracias