Introducción
Al desplegar una tabla de información al usuario es muy común proporcionar acciones sobre los registros, en este caso no centraremos en el uso del GridView el cual aplicara ciertas condiciones sobre estas acciones.
Se trabajar con una lista de Productos a los cuales se podrá realizar acciones.
Las reglas que se aplican son:
- Si cantidad de stock esta en cero mostrara el link de “Order” para poder solicitar la compra.
- Si el producto esta discontinuo se mostrara el icono en la columna “Discontinued”
- Si el producto esta discontinuo no se permitirá editar el producto
Ocultar las acciones dinámicamente
Para lograr el objetivo usaremos un único evento, el RowDataBound, el cual se lanzara por cada row que sea generada en el grid.
El código completo seria:
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType != DataControlRowType.DataRow) return; //se recupera la entidad que genera la row Product prod = e.Row.DataItem as Product; //se valida que el stock esta en cero //para remover el link de la primer columna if (prod.UnitsInStock != 0) e.Row.Cells[0].Controls.Clear(); //se verifica si el producto esta discontinuo //removiendo el icono de la columna Discontinued if (!prod.Discontinued) e.Row.Cells[1].Controls.Clear(); //se verifica si el producto esta discontinuo //para quitar el boton de edicion if (prod.Discontinued) { ImageButton img = e.Row.FindControl("imgEdit") as ImageButton; e.Row.Cells[7].Controls.Remove(img); } //esta es equivalente a la opcion anterior //que remueve la imagen de edicion //if (prod.Discontinued) //{ // e.Row.Cells[7].Controls.RemoveAt(1); //} }
Ahora vamos a analizarlos por partes
Línea 7 : El uso del e.Row.DataItem permite recuperar la entidad concreta del origen de datos para poder usarla en la evaluación, con esta se puede acceder a propiedades de la entidad sin necesidad de haber definido una columna en el grid. En este caso se utiliza una entidad creada por uno, pero si se utilizara un DataTable se debe castear a un DataRowView.
Líneas 11-12: verifica el stock y remueve el control Link de la celda
Líneas 16-17: valida la propiedad Discontinued y remueve la imagen cuando el producto esta activo.
Líneas 21-25: hace uso de la propiedad Discontinued para conocer si debe evitar que el producto pueda ser editado.
Líneas 29-32: implementan la misma funcionalidad que las líneas 21-25, solo es otra forma de lograr lo mismo, pero sin tener que buscar el ImageButton
Código
Se requiere VS 2010 y Sql Server 2008 R2
[C#]
|