Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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!
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
É 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
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
Está usando o if ( ! IsPostBack ), pois se você carregar essa grid toda vez que atualizar a página ele perde tudo.
falow