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 -~----------~----~----~----~------~----~------~--~---
