A continuación un ejemplo de un grid con 2 columnas configuradas para que:
1ª) Muestre un texto y un color dependiendo del valor de un campo numérico.
2ª) Muestre una imagen en función del valor de 2 campos.
[MiPagina.aspx (Diseño de página)]
<asp:GridView ID="grdIncidents" runat="server" CellPadding="4" ForeColor="#333333"
GridLines="None" AutoGenerateColumns="False" DataKeyNames="ID" AllowPaging="False"
AllowSorting="True" Width="100%" CssClass="GridViewStyle">
<Columns>
GridLines="None" AutoGenerateColumns="False" DataKeyNames="ID" AllowPaging="False"
AllowSorting="True" Width="100%" CssClass="GridViewStyle">
<Columns>
<asp:TemplateField HeaderText="Estado" HeaderStyle-HorizontalAlign="Left">
<ItemTemplate>
<asp:Label ID="gridViewLabelState" DataField="State" runat="server"
<ItemTemplate>
<asp:Label ID="gridViewLabelState" DataField="State" runat="server"
ForeColor='<%# GetStateColor(Eval("State"))%>'
Text='<%# IncidentStateToString(Eval("State"))%>'/>
ItemTemplate>
asp:TemplateField>
ItemTemplate>
asp:TemplateField>
<asp:TemplateField HeaderText="" HeaderStyle-HorizontalAlign="Left">
<ItemTemplate>
<asp:Image ID="gridViewImageSemaforo" runat="server"
<ItemTemplate>
<asp:Image ID="gridViewImageSemaforo" runat="server"
ImageUrl='<%# GetSemaphoreImageUrl(Eval("State"), Eval("CreationDate"))%>' />
ItemTemplate>
asp:TemplateField>
Columns>
ItemTemplate>
asp:TemplateField>
Columns>
asp:GridView>
[MiPagina.aspx.cs (Code behind)]
protected string IncidentStateToString(object state)
{
return Incident.IncidentStateEnumToString((Incident.StateEnum)state);
}
/// Método llamado desde la página para cambiar el color de un State.
protected System.Drawing.Color GetStateColor(object state)
{
return IncidentStateColor.GetStateColor((Incident.StateEnum)state);
}
/// Método llamado desde la página para establecer el semáforo a partir del estado y
/// la fecha de creación.
/// Si la incidencia está esperando por un Técnico y lleva abierta más de 1 semana => Rojo!
/// Si la incidencia está esperando por un Técnico pero NO lleva abierta más de 1 semana => Ámbar
/// En cualquier otro caso (la incidencia no está esperando por un Técnico)
/// Estado de la incidencia
/// Fecha de creación de la incidencia
///
protected string GetSemaphoreImageUrl(object state, object creationDate)
{
// Si la incidencia está esperando por un Técnico...
if (Incident.GetStatesFromStatus(Incident.StatusEnum.WaitingForTechnic).Contains<int>((int)state))
//...y abierta desde hace más de 1 semana => Rojo!
if (DateTime.Compare( ((DateTime)creationDate).AddDays(7), DateTime.Now)>0)
return "Resources/semaphoreRed.png";
//...y abierta desde hace menos de 1 semana => Ámbar
else
return "Resources/semaphoreYellow.png";
// En caso contrario (la incidencia no está esperando por un Técnico)
else
return "Resources/semaphoreGreen.png";
}
No hay comentarios:
Publicar un comentario