Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Flavio Uccela

[Resolvido] Pintar e despintar um CheckBox em um GridView

Recommended Posts

Bom dia Galera!

 

Faz um tempo que eu não apareço por aqui.

 

Seguinte...preciso de uma ajuda de vocês.

 

Estou mexendo com um Gridview populado por uma coluna de Checkbox e dados nas outras.

Essa coluna de checkbox pode ter multiplas escolhas.

 

Aí o último cara que mexeu aqui fez a seguinte função:

 

protected void grdprodutos_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox Chk = (CheckBox)e.Row.FindControl("checkbox1");
            Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptChk", "CorLinhaSelecionada", true);
            Chk.Attributes.Add("onClick", "CorLinhaSelecionada(this, '" + Convert.ToString(e.Row.RowState) + "');");
        }
    }

e no JScript ele colocou:

 

function CorLinhaSelecionada(corChk, RowState){
   debugger; 
   if (corChk.checked)
     corChk.parentElement.parentElement.style.backgroundColor="#ffaa63"; 
   else 
   { 
     if (RowState=="0") 
            corChk.parentElement.parentElement.style.backgroundColor="#fffbd6"; 
     else 
            corChk.parentElement.parentElement.style.backgroundColor="#ffffff"; 
   } 
}

Até aí...beleza...agora o problema é: do jeito que ele fez só ta pintando o checkbox e eu tô tentando fazer com que ele pinte a linha inteira.

Pintar a coluna pelo evento CheckedChanged do checkbox não da certo pq pra ele executar o checkedchanged ele precisa de autopostback e com o autopostback os multiplos checkbox selecionados somem.

Aí eu tentei inserir um novo script:

 

   GridViewRow grdRow = (GridViewRow)Chk.NamingContainer;
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptGrid", "CorLinhaSelecionada2", true);
   grdRow.Attributes.Add("onClick", "CorLinhaSelecionada2(this, '" + Chk + "');");
JScript

function CorLinhaSelecionada2(GridRow, Chk)
{   
    debugger;
    if (Chk.checked) 
        GridRow.style.backgroundColor="#ffaa63";  
    else
        GridRow.style.backgroundColor="#ffffff";
}

Agora vem a pergunta, quando ele executa o jscript ele pinta a linha, mas quando eu tirar o check do chkbox seria para ele despintar a linha...alguém tem alguma idéia de como fazer isso?

 

Pode ser uma idéia totalmente fora dessa q eu fiz, pq minhas idéias já foram embora =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom...com a ajuda de um amigo acabei conseguindo fazer o q eu queria...segue o código.

 

C#

CheckBox Chk = (CheckBox)e.Row.FindControl("checkbox1");
            GridViewRow grdRow = (GridViewRow)Chk.NamingContainer;
            Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptChk", "CorLinhaSelecionada", true);
            Chk.Attributes.Add("onClick", 
                               "CorLinhaSelecionada(
                                   '" + grdRow.ClientID + 
                                   "',this, 
                                   '" + Convert.ToString(e.Row.RowState) + "');");

js

function CorLinhaSelecionada(GridRow, Chk, RowState)
{   
    var row = document.getElementById(GridRow);  
    if (Chk.checked)
        row.style.backgroundColor="#ffaa63";
    else
    {
        if (RowState!="Alternate")
            row.style.backgroundColor="#eff3fb";
        else
            row.style.backgroundColor="#ffffff";
    }    
}

Falows!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.