Ir para conteúdo

Arquivado

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

Eddy Goulart

[Resolvido] Checkbox + gridview dinamicos

Recommended Posts

Olá, estou a ponto de ficar louco, estou a 3 dias para solucionar o meu problema, já procurei na internet toda e nada, vamos ver se alguem pode me ajudar, tenho um gridview dinamico, que vai botando checkbox a cada celula da gridview..

 

 rows[Convert.ToString(areas["nomePermissao"])] = Convert.ToString(areas["codPermissaoArea"]);
 //Adiciona Check
 CheckBox ck = new CheckBox();
 ck.ID = Convert.ToString(areas["codPermissaoArea"]); //pega o id (codPermissaoArea)

  //percorre as permissoes do usuario e deixa checked quando tal usuario tem permissão
  for (int k = 0; k < perUsers.Count; k++)
  {
  if (perUsers.ElementAt(k).Equals(rows[Convert.ToString(areas["nomePermissao"])]))
       ck.Checked = true;
  }            
  listaCheck.Add(ck);//adiciona o check em uma lista de checkbox

Bom, dessa jeito os checkbox vão normalmente para dentro de cada celula, mais quando clico em algum botão ou seleciono algo dentro do gridview que de um 'refresh', ele perde o checkbox não podendo nem recupar oque selecionei... HELPPP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou sim, tipo, todos os campos retornam certinho, só o checkbox que não popula novamente, inclusive sua propria gridview, só não aparece é o checkbox

Compartilhar este post


Link para o post
Compartilhar em outros sites

aaa, estou ultilizando isso para adicionar os checkbox no gridview oh


        public void adicionaCheckPerUser()
        {          
            //Percorre Linha
            for (int i = 0; i < gvPerUsu.Rows.Count; i++)
            {
                //Percorre Coluna
                for (int j = 0; j < gvPerUsu.Rows[i].Cells.Count; j++)
                {
                        for (int k = 0; k < listaCheck.Count; k++)
                        {
                            //Verifica se tem a permissao, ai adiciona o checkbox
                            if (listaCheck.ElementAt(k).ID.ToString().Equals(gvPerUsu.Rows[i].Cells[j].Text))
                                gvPerUsu.Rows[i].Cells[j].Controls.Add(listaCheck.ElementAt(k));//Adiciona o checkbox na linha[i] e coluna[j]  
                        }
                    }
                }
            }                 
        }

 

AJUDA??? HELP!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas no primeiro bloco de códigos, você da um New CheckBox();

 

fazendo isso você nunca vai manter o estado anterior, é melhor você já deixar o checkbox na grid e controlar ele com Visible True ou False.

 

Falow

Compartilhar este post


Link para o post
Compartilhar em outros sites

É uma coisa meio complicado de explicar, tem que ser gerado assim, minha dataGrid muda numero de colunas e linha de acordo com registros do BD, o estranho disso tudo é que ele só perde os checkbox, a gridview fica com os dados ainda.

 

Vou colar meu metodo que popula a gridview

 

        public void montaGridPerUsuario(string codUsuario)
        {            
          try
          {
            BDUsuarios usu = new BDUsuarios();
            MySqlDataReader permissoes = usu.listPermissoes();

            if (permissoes.HasRows)
            {
                DataTable mDataTable = new DataTable();    
          
                //Adiciona coluna nome Área no DataTable
                DataColumn mDataColumnArea;
                mDataColumnArea = new DataColumn();
                mDataColumnArea.DataType = Type.GetType("System.String");
                mDataColumnArea.ColumnName = Convert.ToString("Área");
                mDataTable.Columns.Add(mDataColumnArea);

                //Captura as permissoes que o usuario tem
                //se não existir codigo do usuario, lista sua própria permissão  
                if (String.IsNullOrEmpty(codUsuario))
                {
                    codUsuario = getCodUsuarioSessao();
                }
                List<string> perUsers = usu.capturaPermissoesUsuarios(codUsuario);
                string codSessaoUsuario = getCodUsuarioSessao();
               
                int totCol = 1;
                while (permissoes.Read())
                {
                    DataColumn mDataColumn;
                    mDataColumn = new DataColumn();
                    mDataColumn.DataType = Type.GetType("System.String");
                    mDataColumn.ColumnName = Convert.ToString(permissoes["nomePermissao"]);
                    mDataTable.Columns.Add(mDataColumn);

                    totCol++;
                }                
                MySqlDataReader areas = usu.listAreasPermissoes(codSessaoUsuario); 
                if (areas.HasRows)
                {
                    DataRow rows = mDataTable.NewRow();
                    int cont = 0;
                    while (areas.Read())
                    {
                        if (String.IsNullOrEmpty(Convert.ToString(areas["codPermissaoArea"])))
                        {
                            rows[Convert.ToString(areas["nomePermissao"])] = "xxx";
                        }
                        else
                        {
                            rows[Convert.ToString(areas["nomePermissao"])] = Convert.ToString(areas["codPermissaoArea"]);         
                        }
                        cont++;

                        //compara a contagem de coluna para adicionar a linha
                        if (totCol == cont)
                        {
                            rows["Área"] = Convert.ToString(areas["nomeArea"]);

                            mDataTable.Rows.Add(rows);
                            rows = mDataTable.NewRow();                                
                            cont = 0;
                        }
                    }
                    gvPerUsu.DataSource = mDataTable.DefaultView;
                    ModelGridView.setCSS(gvPerUsu);
                    gvPerUsu.DataBind();
                    
                    //Percorre Linha
                    for (int i = 0; i < gvPerUsu.Rows.Count; i++)
                    {
                        //Percorre Coluna
                        for (int j = 0; j < gvPerUsu.Rows[i].Cells.Count; j++)
                        {
                            //css para deixar tudo alinhado ao centro
                            if (j != 0) gvPerUsu.Rows[i].Cells[j].CssClass = "c";
                            //quando for diferente da coluna Área e diferente de xxx
                            if (j != 0 && !gvPerUsu.Rows[i].Cells[j].Text.Equals("xxx"))
                            {
                                //Adiciona Check  
                                CheckBox ck = new CheckBox();
                                ck.ID = gvPerUsu.Rows[i].Cells[j].Text; //pega o id (codPermissaoArea)
                                
                                //Aplica checkbox true ou false
                                for (int k = 0; k < perUsers.Count; k++)
                                {
                                    if (perUsers.ElementAt(k).Equals(gvPerUsu.Rows[i].Cells[j].Text))
                                        ck.Checked = true;
                                }
                                gvPerUsu.Rows[i].Cells[j].Controls.Add(ck);
                            }
                        }
                    }   
                }
                else
                {
                    ModelMsg.msgErro("Não há nenhuma área cadastrada", this.msgErro);
                }                    
            }
            }catch (Exception ex)
            {
              ModelMsg.msgErro("Erro: " + ex.Message.ToString(), this.msgErro);
            }
        }

Esse método chamo quando listo um usuário, quando clico por exemplo em Salvar, ele perdi todo checkbox contido na gridview

 

Oque devo fazer para não perder esses valores? HELPP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dae galera, bom, meu problema foi solucionado, apenas botei o metodo rodar do Page_Load da pagina

 

 

protected void Page_Load(object sender, EventArgs e)
        {
            montaGridPerUsuario("");
        }

 

E no metodo montaGridPerUsuario botei no inicio do metodo o seguinte codigo

public void montaGridPerUsuario(string codUsuario)
        {            
             painelPerUser.Dispose();//Destrói o painel
             painelPerUser.Controls.Clear();

Para destroir os objetos criados.. bom, ta meio confuso pra mim ainda.. mais funfo

flws

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.