Boa Noite João,

Já "brinquei" bastante com DataGrids,  e pelo que eu li no seu texto sei o
que está acontecendo ou pelo menos acho que sei.

Este problema ocorre pois o Datagrid vai alterando os valores do
itemRenderer para que sejam atualizados na tela conforme você vai rolando o
Scroll,
desta forma o ItemRenderer acaba bugando pois o valor do checkBox é dinâmico
e pode ser alterado, a unica forma que eu achei de contornar estes Bugs é
utilizando uma propriedade do seu ItemRenderer chamada "dataChange" que na
verdade é um evento, ou seja, no dataChange você chamaria uma função que
está dentro do próprio itemRenderer que faria com que no seu caso, o
"selected" do check box, recebece o valor do campo do ser data provider
exemplo:

checkBox.selected = data.valorDataSelecionado;

Não sei se consegui explicar muito bem, pois também não consegui acessar o
Screencast que você passou, por causa da internet...hehehe

Mais de um retorno ai, que assim que possivel estarei verificando o
screencast.

Att,
-- 
Tiago Antonio Jacobi
Representante
[email protected]
Butiking Futebol Clube.


2009/4/2 João Paulo Braga <[email protected]>

>  Pessoal,
>
> sei que esse assunto já foi muito discutido aqui, mas procurei e não achei
> nenhuma mensagem com uma situação parecida com a minha. Coloquei um
> screencast do meu problema, de modo que seja mais fácil de visualizar esse
> comportamento estranho:
>
> http://screencast.com/t/orPQDa5Sm
>
> Tenho um datagrid cuja primeira coluna é a do checkbox. As duas colunas de
> botões são fixas e as colunas com os campos do formulário são criadas
> dinamicamente, pois os campos são variáveis.
>
> Tudo funciona bem, quando eu clico nos checkboxes eu consigo capturar os
> respectivos documentos. O problema está quando eu clico nos botões de
> nagevação da paginação. O datagrid simplesmente vai incrementando o índice
> do(s) checkbox(es) selecionado(s), à medida em que eu vou avançando nas
> páginas do resultado. Eu já revisei todo o meu código diversas vezes e não
> existe nada que pareça ser a causa desse problema. Como o arraycollection
> que server de dataProvider é criado dinamicamente, eu coloquei um
> Alert.show() dentro do if quando o valor selecionado é true. Nunca entra
> nesse if, mas os checkboxes continuam lá.
>
> Aqui está o código do datagrid:
>
> <mx:DataGrid id="gridResultado" height="100%" editable="true"
> allowMultipleSelection="true">
>     <mx:columns>
>         <mx:DataGridColumn headerText=""
>             textAlign="center"
>             width="30"
>             dataField="selecionado"
>             editable="false"
>             rendererIsEditor="false"
>             sortable="false">
>          <mx:itemRenderer>
>            <mx:Component>
>             <mx:HBox horizontalAlign="center">
>                 <mx:Script>
>                 <![CDATA[
>                 //import mx.controls.Alert;
>                 import com.meyer.documentsuite.view.entity.Documento;
>                 private function
> docSelecionadoChange(documento:Documento):void
>                 {
>                     outerDocument.docsSelecionadosChange(documento);
>                }
>                 ]]>
>             </mx:Script>
>             <mx:CheckBox id="checkGrid"
> click="docSelecionadoChange(data.documento)" />
>           </mx:HBox>
>         </mx:Component>
>     </mx:itemRenderer>
> </mx:DataGridColumn>
>
>
> E aqui está o conteúdo do método docsSelecionadosChange(), chamado no
> momento em que o checkbox é clicado. Ele basicamente insere ou remove o
> documento de um arrayCollection chamado docsSelecionados:
>
> public function docsSelecionadosChange(documento:Documento):void
>    {
>     var indice:int = listDocumentos.getItemIndex(documento);
>     var jaFoiSelecionado:Boolean = docsSelecionados.getItemIndex(documento)
> >= 0 ? true : false;
>
>     if(jaFoiSelecionado)
>     {
>      var indiceDel:int = docsSelecionados.getItemIndex(documento);
>      docsSelecionados.removeItemAt(indiceDel);
>     }
>     else
>     {
>      var selDoc:Documento = listDocumentos.getItemAt(indice) as Documento;
>      docsSelecionados.addItem(selDoc);
>     }
>    }
>
> Aqui está o código que gera o campo "selecionado". Ele verifica se o
> documento já está no arrayCollection docsSelecionados. Se sim, ele é setado
> como true:
>
> *
>
> //verifica se ele já está selecionado no checkbox do datagrid
> *
>
> *var* indiceEmDocsSelecionados:int = docsSelecionados.getItemIndex(docX);
>
> *if* (indiceEmDocsSelecionados >= 0)
>
> {
>
> dict[
> *"selecionado"*] = *true*;
>
> Alert.show(
> *"selecionado o indice "* + k.toString());
>
> }
>
> *else*
>
> {
>
> dict[
> *"selecionado"*] = *false*;
>
> }
>
>
>
> Pessoal, sei que essa mensagem é bastante extensa, mas resumi o máximo
> possível, de forma que possa ser compreendida por alguém que já passou por
> esse problema ou tenha alguma dica de como resolver.
>
> Desde já agradeço toda e qualquer ajuda do grupo.
>
> Atenciosamente,
>
>
>
> João Paulo de Lima Braga
> Analista de Sistemas, CDIA+
> Meyer
> www.meyerr.com.br
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a