Adionar e remover coluna no CGridView

Estou com um ideia de desenvolver um sistema que o usuario tem a total liberdade de escolher quais coluna ele quer no grid adicionando ou removendo, entao gostaria de saber se teria como desenvolver via ajax estas requisiçoes e atualizar o grid e ao mesmo tempo salvando em uma tabela esta configuraçoes, alguem poderia dar uma ideia de como fazer isso.

Valews

Edson, não parei para pensar a fundo, mas não deve ser nada de outro mundo.

As colunas exibidas são passadas para o GridWidget como parâmetro em um array.

Você pode salvar no banco esse array para cada grid com o id do usuário.

Talvez complique mudar a estrutura do grid somente via ajax. Em último caso, quando o usuário refizer a seleção de colunas você dá reload na página.

É moleza.

O CGridWidget quando faz a requisição, ele pega a geração da view completa, corta a parte do html do grid via javascript após a requisição ajax e se auto-substitui. Então, se vc adicionar alguma coluna no grid dinamicamente ela vai aparecer, mesmo em requisições ajax.

Ao contrário de como funciona outros grids, como o jqGrid, o CGgridWidget remonta o grid a cada requisição. Isso é bom pq da essa mobilidade a mais, mas tb é ruim pq gera mais tráfego. No seu caso, é perfeito, mas acho que poderia ter uma opção pra desabilitar isso e retornar só os dados num formato diferente, como xml ou json.

Precisa ser dinamico?

Por que cada coluna tem o visible => true?false.

Ai tu cria uma tabela com essas configurações, ai cada controller tu busca da configuração do usuário.

mas é exatamente isso … o visible funciona "dinamicamente", desde que vc atualize o grid via ajax.

Alguem ja fez isso via ajax e que poderia mostrar um exemplo via ajax, pois estou tentando e nao estou conseguindo

valew

quando clicar num botão/link/etc (onde vc quera atualizar) vc inclui o código javascript abaixo:


$.fn.yiiGridView.update("id do seu grid");

Pode ser interceptando um submit, num link, ou qualquer evento que vc necessite. Isso vai fazer que o grid atualize neste momento via ajax, como se vc tivesse clicado numa coluna pra mudar a ordem dos dados(Mas sem mudar nada).

Na sua view, é só vc utilizar a propriedade view da coluna e, no cliente a coluna vai sumir/aparecer via ajax.

O ruim é que tem que mandar atualizar, pq as vezes fica uma requisição desnecessária, mas é uma forma prática.

Amigos,

Como faço pra atualizar só a GridView de minuto a minuto, por exemplo?

Sds,

Adriano Silva

da uma olhada em: http://www.w3schools.com/jsref/met_win_setinterval.asp

Não testei, mas acho que a grid vai ser atualizada, mas quando atualizar, vai voltar a primeira página.