Array
(
)

Verificar se uma coluna do GridView está Vazia

Jair Souza
   - 22 fev 2015

Windows Form, em um Grid verificar se a coluna "Data de Devolução" tem uma data e se tiver deixar toda linha com ForeColor Red, a grosso modo seria mais ou menos assim :
Este código dá erro de operador "!="...
#Código

private void locacaoDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            for (int i = 0; i < locacaoDataGridView.Rows.Count; i++)
            {
                if (locacaoDataGridView.Rows[i].Cells[3].Value.ToString() != string.IsNullOrEmpty)
                {
                    locacaoDataGridView.Rows[i].DefaultCellStyle.ForeColor = Color.Red;

Clique na imagem para abrir em uma nova janela

Joel Rodrigues
   - 23 fev 2015

Está dando erro porque String.IsNullOrEmpty é um método. Você deve comparar com String.Empty ou simplesmente "".

Jair Souza
   - 23 fev 2015

Ajustei, mas assim somente a coluna fica em vermelho, sabes como fazer para que as linhas que tenham data de devolução, fiquem em vermelho ?
As tentativas que soube fazer, fica tudo vermelho ou somente a coluna...

#Código

private void locacaoDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            for (int i = 0; i < locacaoDataGridView.Rows.Count; i++)
            {
                if (locacaoDataGridView.Rows[i].Cells[3].Value.ToString() != string.Empty)
                {
                    locacaoDataGridView.Rows[i].Cells[3].Style.ForeColor = Color.Red;

        }
}


Clique na imagem para abrir em uma nova janela

Jothaz
   - 23 fev 2015

Tenta por Row:
#Código

  locacaoDataGridView.Rows[i].Style.ForeColor = Color.Red;

Thiago Santana
   - 23 fev 2015

Não tenho como testar no momento, mas acho que você deve testar com o Text
#Código

locacaoDataGridView.Rows[i].Cells[3].Text != string.Empty

Jair Souza
   - 23 fev 2015


Citação:
Tenta por Row:
#Código

  locacaoDataGridView.Rows[i].Style.ForeColor = Color.Red;


Para Rows a única opção seria :

#Código
 locacaoDataGridView.Rows[i].DefaultCellStyle.ForeColor = Color.Red;


Mas, assim ficam todas as linha em vermelho...

Jair Souza
   - 23 fev 2015


Citação:
Não tenho como testar no momento, mas acho que você deve testar com o Text
#Código

locacaoDataGridView.Rows[i].Cells[3].Text != string.Empty


Já havia testado como .Text o código não aceita :

Clique na imagem para abrir em uma nova janela

Jair Souza
   - 26 fev 2015

Assim está verificando corretamente e deixa a coluna em vermelho...só falta deixar toda linha em vermelho, mas não sei como... tudo que achei na net, não funciona...

Alguém sabe ?

#Código

if (locacaoDataGridView.Rows[i].Cells[3].Value.ToString() != string.Empty)
                {
                    locacaoDataGridView.Rows[i].Cells[3].Style.ForeColor = Color.Red;
                 }

Thiago Santana
   - 27 fev 2015

#Código

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

   if (e.Row.RowType == DataControlRowType.DataRow)
   {
    //Check your condition here
    If(Condition True)
    {
        e.Row.BackColor = Drawing.Color.Red // This will make row back color red
    }
}
}


Tente algo como isso e vê se resolve seu problema!

Jair Souza
   - 27 fev 2015

Em windows form não tem o evento RowDataBound, então coloquei no CellFormatting, mas não aceita o e.Row. o DataControl e o Drawing.

Thiago Santana
   - 27 fev 2015

Ah é Windows Form né!?
Esse código que te passei é pra Web. Mas com windows form deve ter algum evento que você possa obter a row. Só não sei de cabeça o qual!
Muito tempo que fiz algo com Windows Form.

Jair Souza
   - 27 fev 2015

Pois então, o CellFormatting é o similar ao RowDataBound, mas não deu, vou continuar tentando descobrir, pois isto é fundamental no aplicativo...se alguém souber, toda ajuda é bem vinda.

Jair Souza
   - 09 mar 2015

Já procurei muito, mas não acho nada, alguém tem alguma dica ?