none
Colocar linha do grid com cor vermelha de acordo com valor em uma coluna RRS feed

  • Pergunta

  • Bom dia.

    Tenho um grid que possui 6 colunas que são populadas com informações do banco

    A sexta coluna possui informação boolena que informa se um movimento está ou não fechado

    gostaria de que a linha do grid ficasse vermelha caso a célula na coluna closed esteja com o valor false conforme código e imagem abaixo.

    ASP.NET

    <asp:GridView ID="gvInformationPeriod" runat="server" Width="100%" CssClass="GridViewUser" AllowPaging="True" CellPadding="4" AutoGenerateColumns="False"
                                GridLines="None" ForeColor="#333333" OnPageIndexChanging="gvInformationPeriod_PageIndexChanging" PageSize="100">
                                <AlternatingRowStyle CssClass="GridAlternativeUser" BackColor="White" />
                                <Columns>
                                    <asp:BoundField DataField="PeriodID" HeaderText="PeriodID" />
                                    <asp:BoundField DataField="SchoolID" HeaderText="SchoolID" />
                                    <asp:BoundField DataField="DateOpen" HeaderText="Aberto Em" />
                                    <asp:BoundField DataField="UserName" HeaderText="Usuario" />
                                    <asp:BoundField DataField="PCName" HeaderText="PC Name" />
                                    <asp:BoundField DataField="Closed" HeaderText="Closed" />
                                </Columns>
                                <EditRowStyle BackColor="#2461BF" />
                                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                                <PagerStyle BackColor="#62AFC1" CssClass="GridPagerUser" ForeColor="White" HorizontalAlign="Center" />
                                <RowStyle BackColor="#EFF3FB" />
                                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                                <SortedAscendingCellStyle BackColor="#F5F7FB" />
                                <SortedAscendingHeaderStyle BackColor="#6D95E1" />
                                <SortedDescendingCellStyle BackColor="#E9EBEF" />
                                <SortedDescendingHeaderStyle BackColor="#4870BE" />
                            </asp:GridView>

    ASPX.CS

     private void ListarGridInformationPeriod(GridViewRowEventArgs e)
            {
                if (ddlSchool.SelectedValue != "")
                {
                    gvInformationPeriod.Visible = true;
                    gvInformationPeriod.DataSource = Period.ListOpenPeriod(int.Parse(ddlSchool.SelectedValue));
                    gvInformationPeriod.DataBind();
                }
            }
    
            private void ListarGridInformationProduct()
            {
                if (ddlSchool.SelectedValue != "")
                {
                    gvInformationProduct.Visible = true;
                    gvInformationProduct.DataSource = Product.ListStockGridView(int.Parse(ddlSchool.SelectedValue));
                    gvInformationProduct.DataBind();
                    CarregaLabel();
                }
            }
    
            protected void gvInformationPeriod_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                if (!string.IsNullOrEmpty(ddlSchool.SelectedValue))
                {
                    gvInformationPeriod.PageIndex = e.NewPageIndex;
                    gvInformationPeriod.DataSource = Period.ListOpenPeriod(int.Parse(ddlSchool.SelectedValue));
                    gvInformationPeriod.DataBind();
                }
            }
    
            protected void gvInformationProduct_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                if (!string.IsNullOrEmpty(ddlSchool.SelectedValue))
                {
                    gvInformationProduct.PageIndex = e.NewPageIndex;
                    gvInformationProduct.DataSource = Product.ListStockGridView(int.Parse(ddlSchool.SelectedValue));
                    gvInformationProduct.DataBind();
                }
            }

    segunda-feira, 9 de junho de 2014 12:17

Respostas

  • Eu fiquei na dúvida de como colocar a comparação se na célula o valor é false ou true

     Amigo basicamente você deve obter o valor da coluna, por exemplo no meu caso criei uma classe chamada PreencheGrid e no RowDataBound eu leio o Item da linha ou seja recupero todos os valores daquela linha e faço o cast para o tipo que eu preciso, veja meu code behind :

    using System;
    using System.Collections.Generic;
    
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Drawing;
    using System.Data;
    
    namespace MSDN
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
                List<PreencheGrid> dados = new List<PreencheGrid>();
    
                bool escolha = false;
    
                for (int i = 0; i < 10; i++)
                {
                    PreencheGrid p = new PreencheGrid();
                    p.Nome = "TESTE DE COR DE LINHA GRIDVEW";
                    p.Data = DateTime.Now;
                    p.Escolha = escolha;
    
                    if (escolha)
                        escolha = false;
                    else
                        escolha = true;
    
                    dados.Add(p);
                }
    
                GridView1.DataSource = dados;
                GridView1.DataBind();
            }
    
            class PreencheGrid
            {
                public string Nome { get; set; }
                public DateTime Data { get; set; }
                public bool Escolha { get; set; }
            }
    
            protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
    
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    PreencheGrid row = (PreencheGrid)e.Row.DataItem;
    
                    if (row != null)
                    {
    
                        bool valor = Convert.ToBoolean(row.Escolha);
    
                        if (valor)
                            e.Row.BackColor = Color.Red;
                    }
                }
            }
    
        }
    }

     E meu aspx :

     <form id="form1" runat="server">
        <div>
        
        <asp:GridView ID="GridView1" runat="server" onrowdatabound="GridView1_RowDataBound">
        </asp:GridView>  
    
    
        </div>
        
        </form>
     Veja se entende a idéia de como funciona como se recupera o item, entendendo isso vai ficar muito simples de aplicar qualquer tipo de regra !

    • Marcado como Resposta Paulo Romeiro segunda-feira, 9 de junho de 2014 16:33
    segunda-feira, 9 de junho de 2014 13:07
  •  Paulo,

       veja como vai ficar, basta colocar o nome da sua coluna como no exemplo veja :

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
    
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DataRowView row = (DataRowView)e.Row.DataItem;
    
                    if (row != null)
                    {
    
                        bool valor = Convert.ToBoolean(row["AQUINOMESUACOLUNA"]);
    
                        if (valor)
                            e.Row.BackColor = Color.Red;
                    }
                }
            }

    • Marcado como Resposta Paulo Romeiro quarta-feira, 11 de junho de 2014 17:19
    segunda-feira, 9 de junho de 2014 16:40

Todas as Respostas

  • Olá Paulo,

     use o evento do GridView chamado RowDataBound veja um Exemplo de como fazer isso !

    segunda-feira, 9 de junho de 2014 12:21
  • Eu fiquei na dúvida de como colocar a comparação se na célula o valor é false ou true
    segunda-feira, 9 de junho de 2014 12:32
  • Eu fiquei na dúvida de como colocar a comparação se na célula o valor é false ou true

     Amigo basicamente você deve obter o valor da coluna, por exemplo no meu caso criei uma classe chamada PreencheGrid e no RowDataBound eu leio o Item da linha ou seja recupero todos os valores daquela linha e faço o cast para o tipo que eu preciso, veja meu code behind :

    using System;
    using System.Collections.Generic;
    
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Drawing;
    using System.Data;
    
    namespace MSDN
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
                List<PreencheGrid> dados = new List<PreencheGrid>();
    
                bool escolha = false;
    
                for (int i = 0; i < 10; i++)
                {
                    PreencheGrid p = new PreencheGrid();
                    p.Nome = "TESTE DE COR DE LINHA GRIDVEW";
                    p.Data = DateTime.Now;
                    p.Escolha = escolha;
    
                    if (escolha)
                        escolha = false;
                    else
                        escolha = true;
    
                    dados.Add(p);
                }
    
                GridView1.DataSource = dados;
                GridView1.DataBind();
            }
    
            class PreencheGrid
            {
                public string Nome { get; set; }
                public DateTime Data { get; set; }
                public bool Escolha { get; set; }
            }
    
            protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
    
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    PreencheGrid row = (PreencheGrid)e.Row.DataItem;
    
                    if (row != null)
                    {
    
                        bool valor = Convert.ToBoolean(row.Escolha);
    
                        if (valor)
                            e.Row.BackColor = Color.Red;
                    }
                }
            }
    
        }
    }

     E meu aspx :

     <form id="form1" runat="server">
        <div>
        
        <asp:GridView ID="GridView1" runat="server" onrowdatabound="GridView1_RowDataBound">
        </asp:GridView>  
    
    
        </div>
        
        </form>
     Veja se entende a idéia de como funciona como se recupera o item, entendendo isso vai ficar muito simples de aplicar qualquer tipo de regra !

    • Marcado como Resposta Paulo Romeiro segunda-feira, 9 de junho de 2014 16:33
    segunda-feira, 9 de junho de 2014 13:07
  • Criei o evento RowDataBound dessa forma mas não funcionou

    protected void gvInformationPeriod_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    if (e.Row.Equals("false"))
                    {
                        e.Row.BackColor = Color.Red;
                    }
                }
            }

    Não entendi bem como recuperar o item para poder mudar a propriedade da cor da linha do grid

    segunda-feira, 9 de junho de 2014 14:29
  • Criei o evento RowDataBound dessa forma mas não funcionou

    protected void gvInformationPeriod_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    if (e.Row.Equals("false"))
                    {
                        e.Row.BackColor = Color.Red;
                    }
                }
            }

    Não entendi bem como recuperar o item para poder mudar a propriedade da cor da linha do grid

     Olá Paulo,

      como você preenche o DataSource de seu Grid, ´usando DataTable, List<T>, mostre como faz isso que eu lhe explico como ler o item !

    segunda-feira, 9 de junho de 2014 14:36
  • Eu populo o grid através do DataTable

    public static DataTable ListStockGridView(int schoolId)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(" SELECT commons.Product.Name, commons.Stock.Quantity");
                sb.Append(" FROM commons.Stock INNER JOIN commons.Product ON commons.Stock.SchoolID = commons.Product.SchoolID AND commons.Stock.ProductID = commons.Product.ProductID INNER JOIN commons.School ON commons.Stock.SchoolID = commons.School.SchoolId AND commons.Product.SchoolID = commons.School.SchoolId");
                sb.Append(" WHERE (commons.Stock.Quantity <= 10) AND (commons.Product.Active = 1) AND (commons.School.SchoolId = "+ schoolId +")");
                return AcessoDados.SelectDados(sb.ToString(), "conexao");
            }

    segunda-feira, 9 de junho de 2014 16:21
  • Funcionou dessa forma.

     protected void gvInformationPeriod_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    if (e.Row.Cells[5].Text.Equals("False"))
                    {
                        e.Row.BackColor = Color.FromName("red");
                    }
                }
            }

    Obrigado.

    segunda-feira, 9 de junho de 2014 16:32
  •  Paulo,

       veja como vai ficar, basta colocar o nome da sua coluna como no exemplo veja :

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
    
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DataRowView row = (DataRowView)e.Row.DataItem;
    
                    if (row != null)
                    {
    
                        bool valor = Convert.ToBoolean(row["AQUINOMESUACOLUNA"]);
    
                        if (valor)
                            e.Row.BackColor = Color.Red;
                    }
                }
            }

    • Marcado como Resposta Paulo Romeiro quarta-feira, 11 de junho de 2014 17:19
    segunda-feira, 9 de junho de 2014 16:40