sábado, 1 de septiembre de 2007

Empezando 1.0

Hoy empiezo este nuevo blog.

Al final he decidido separarlo del primero para tener uno que se centrase en ASP.NET exclusivamente.
Espero que encontréis por aquí cosas interesantes y que os ayuden.

Muchas gracias y un saludo!!

lunes, 27 de agosto de 2007

Dar formato a la fecha en un GridView: DataFormatString y HtmlEncode...

A veces nos podemos encontrar con que necesitamos que el formato en que se muestra una fecha en un GridView sea el que nosotros queramos.
Esto se puede solucionar de forma sencilla. Simplemente tenemos que establecer la propiedad DataFormatString al formato de fecha que queremos que se muestre.
Por ejemplo, si queremos que sólo se muestren el día, el mes y el año de una fecha, tendríamos que establecer dicha propiedad a:
dataformatstring="{0:MM/dd/yyyy}"
Sencillo, no? Pues con eso no es suficiente!
Comom podéis leer en este post del blog de Peter Kellner, para que el formato se aplique de verdad en la columna del GridView, tenemos que modificar el valor por defecto de otra propiedad del campo del GridView en cuestión. Esta propiedad es htmlencode y el valor al que la tenemos que poner es a "false". Es decir:
htmlencode="false"
¿Y para que sirve la propiedad "HtmlEncode"? Pues evita los ataques del tipo "cross-site scripting" y que se muestre contenido malicioso. Por eso Microsoft recomienda que siempre que se pueda se encuentre a "true".

Si es así, está claro, no? Bueno, la explicación sencilla viene ahora. Según nos explica muy bien Peter Keller, es que esta si esta propiedad se encuentra activa, no se puede pasar información al campo enlazado (boundfield) del control.
Ahora sí, no?

En fin, el código final de la columna del GridView será:
<asp :BoundField DataField=“Fecha”
DataFormatString=“{0:M-dd-yyyy}”
HeaderText=“Fecha” />
Cómo podéis ver es sencillo.
Sólo por mencionarlo, Peter Keller nos da otra solución, que es hacer que la columna sea una plantilla (con una etiqueta o un campo de texto) y establecer el formato directamente sobre dicha etiqueta o campo de texto.
En su post podéis encontrar un ejemplo.

Como siempre espero que os haya servido de ayuda.

Un saludo!

domingo, 26 de agosto de 2007

El Gridview y la Paginación

Cuando trabajamos con un gridview, una de las opciones con la que nos encontramos es permitir la paginación, es decir, que los resultados no se muestren todos seguidos, sino que se muestren en diferentes páginas. El número de páginas, dependerán del número de resultados que se muestren (mejor dicho, que le eigamos que muestre) por cada una de las páginas.

Hasta aquí podemos decir que la teoría es muy bonita y todo funciona muy bien, siempre que no queramos hacer nada que se salga un poco de lo normal... Siempre que consideremos que enlazar un gridview con un dataset o con una lista enlazada creada por nosotros se salga un poco de lo normal...

Bueno, el caso es que, cuando trabajamos con un data source de los que nos proporciona el framework de ASP.NET, como por ejemplo un ObjectDataSource, no encontramos ningún problema con la paginación, ya que simplemente tenemos que configurar un par de opciones (que el gridview permita paginación y el número de entradas que queremos que se muestren por cada página) para que todo se ajuste a lo que queremos.

Pero... y si no enlazamos con uno de los data sources que proporciona ASP.NET?? Pues bien, si, por ejemplo enlazamos el gridview con una lista enlazada o un dataset creado por nosotros, al activar la paginación nos encontraremos con un pequeño problema. Y es que, al hacer click sobre una página diferente a la que nos encontramos, obtendremos un error. Algo así:
El GridView "nombre_del_GridView" ha generado el evento PageIndexChanging, que no estaba controlado.
¿Y esto por qué? Pues bien, sencillamente porque a paginacion del control GridView viene asociado o esta intrinsecamente asociado al control proveedor de datos que se lo esta vinculando el datasource debe soportar ICollection. Aquí tenéis la explicación sobre la paginación del GridView.
Bueno, y entonces, ¿cómo lo solucionamos? Pues bien sencillo. Lo único que hay que hacer es incluir en nuestro código un método asociado al evento PageIndexChanging. De esta forma ya no nos aparecerá el error. Para que la funcionalidad sea la que queremos, pues sólo tenemos que incluir un código como este:

protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView2.PageIndex = e.NewPageIndex;
List lista = obtenerLista;
GridView2.DataSource = llista;
GridView2.DataBind();
}


NOTA: en el ejemplo véis que he incluido un método para obtener la lista que luego se enlazará al GridView. Aquí hay que obtener el datasource que queramos para el GridView.

Y ya está! Así de sencillo.
Espero que os haya servido de algo.

Un saludo!