Tengo una tabla elaborada con GridView donde se cargan dinamicamente los campos a través de una lista generada dinamicamente. pero tengo que hacer que la primer celda de cada fila que contiene el numero ponga un fondo de celda de cierto color que se obtiene de la lista que rellena la tabla, leyendo en internet encontre que podia usar un control literal para inyectar una celda mas antes del nombre pero el problema es que al momento que se ejecuta el programa se generan dos celdas mas y esto es porque una de las celdas es por el control literal y la segunda es por el codigo inyectado, ahorita muestro imagenes. Si a alguien se le ocurre una sugerencia para mi problema se lo agradecere mucho:
el codigo en la pagina ASPX es:
Cita:
<asp:GridView ID="dgProductos" runat="server" DataKeyNames="Clave" AutoGenerateColumns="False" EnableViewState="False" OnRowCreated="dgProductos_RowCreated">
<Columns>
<asp:TemplateField>
<%--<asp:Literal ID="MuestraColor" runat="server"></asp:Literal>--%>
<%--<HeaderTemplate>
<td></td>
</HeaderTemplate>--%>
<ItemTemplate>
<asp:Literal ID="MuestraColor" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField DataTextField="Clave" DataTextFormatString="{0}" DataNavigateUrlFields="Clave" DataNavigateUrlFormatString="Altas.aspx?id={0}" HeaderText="ID"/>
<asp:BoundField DataField="NombreProducto" HeaderText="Nombre" />
<asp:TemplateField HeaderText="Fecha de Registro">
<ItemTemplate>
<%#this.fechaCorta(Eval("FechaRegistro"))%>
</ItemTemplate>
</asp:TemplateField>
...
Y el codigo con el que inyecto la celda es este:<asp:GridView ID="dgProductos" runat="server" DataKeyNames="Clave" AutoGenerateColumns="False" EnableViewState="False" OnRowCreated="dgProductos_RowCreated">
<Columns>
<asp:TemplateField>
<%--<asp:Literal ID="MuestraColor" runat="server"></asp:Literal>--%>
<%--<HeaderTemplate>
<td></td>
</HeaderTemplate>--%>
<ItemTemplate>
<asp:Literal ID="MuestraColor" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField DataTextField="Clave" DataTextFormatString="{0}" DataNavigateUrlFields="Clave" DataNavigateUrlFormatString="Altas.aspx?id={0}" HeaderText="ID"/>
<asp:BoundField DataField="NombreProducto" HeaderText="Nombre" />
<asp:TemplateField HeaderText="Fecha de Registro">
<ItemTemplate>
<%#this.fechaCorta(Eval("FechaRegistro"))%>
</ItemTemplate>
</asp:TemplateField>
...
Cita:
Espero haberme dado a entender, les muestro lo que el codigo de arriba genera:protected void dgProductos_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Literal output = (Literal)e.Row.FindControl("MuestraColor");
output.Text = string.Format("<td style=\"background: url(images/bggreen.jpg) repeat-y right\">");
}
}
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Literal output = (Literal)e.Row.FindControl("MuestraColor");
output.Text = string.Format("<td style=\"background: url(images/bggreen.jpg) repeat-y right\">");
}
}
como ven, me general la columna que tiene la celda con el color de fondo y ademas la columna del control literal, quiero esconder esta ultima o bien encontrar un metodo para cambiarle dinamicamente el color de fondo a la primer celda que viene a ser el ID