Valeu Julio obrigado pela resposta vou testar isso.. On 22 jan, 19:09, Júlio César Ködel <[email protected]> wrote: > Uma coisa que vocês tem que ter noção é que o grid, ou qualquer outro > componente de lista do Flex NÃO POSSUEM ITENS NEM LINHAS! > > Ele simplesmente apresenta os dados providos na propriedade dataProvider. > > Portanto, o que você quer fazer é simplesmente copiar um elemento do array > para outra posição. > > Mas aí temos as pegadinhas. Rá! =) > > Arrays, por padrão, são imutáveis, ou seja, não é nada bom adicionar itens > neles (já que eles alocam um espaço em memória com apenas um ponteiro e > adicionar um item nestes caras implica, implicita ou explicitamente, em > copiar todo o array antigo para uma nova localização na memória + o item a > ser inserido). > > Por isso a grande maioria das operações feitas em listas no Flex são através > do ArrayCollection, que são listas de dados onde novos dados podem ser > adicionados mais facilmente (e há mecanismos internos para prover > performance a esta operação). > > O grande problema é que cada item do ArrayCollection é um objeto. E o que é > um objeto? Apenas um inteiro apontando para uma estrutura da memória. Então > copiar o objeto para outra posição do array na verdade não o copia, apenas > copia sua referência (o que implica que uma alteração no item original seja > imediatamente replicada para os itens copiados já que eles são a mesma > coisa, a mesma estrutura em memória). > > Para isso o ActionScript define uma interface para adicionar o método Clone > em um objeto. Cabe a você, programador, implementar o mecanismo de clone na > sua classe que implica, basicamente, em criar uma nova instância do tipo > desejado e copiar cada uma das propriedades para esta nova instância, > gerando assim uma cópia real do objeto. > > Então, vamos supor sua classe: > > public class MinhaClasse > { > public var nome:String; > public var idade:int; > > } > > Ficaria assim: > > public class MinhaClasse > { > public var nome:String; > public var idade:int; > > public function clone():MinhaClasse > { > var copia:MinhaClasse = new MinhaClasse(); > > copia.nome = this.nome; > copia.idade = this.idade; > return copia; > } > > } > > Aí no teu grid, você poderia fazer: > > (grid.dataProvider as ArrayCollection).addItem(itemADuplicar.clone()); > > E, pronto, você tem um item duplicado na sua estrutura de dados. > > Note, obviamente, que se sua classe tiver um atributo/propriedade que seja > não primitivo, você deverá clonar este elemento também, ou seja, supondo que > NOME seja uma classe sua composta pelos campos nome e sobrenome. Não > adiantaria fazer copia.nome = this.nome porque, novamente, você estaria > apenas duplicando o ponteiro. Neste caso o mesmo esquema deveria ser > adotado: copia.nome = this.nome.clone(); > > 2010/1/22 Lorenzi <[email protected]> > > > > > > > Boa tarde. > > > Seguinte minha duvida é essa tenho um datagrid com tres colunas nome, > > idade, duplicar(este sera um botao para o cara clicar) . Minha duvida > > é como eu faço para clicar no duplicar e ele criar uma nova linha no > > grid, copiando a linha clicada. > > > /*normal*/ > > Nome idade Duplicar > > Marcelo 23 + > > > /*duplicado*/ > > Nome idade Duplicar > > Marcelo 23 + > > Marcelo 23 + > > > /*duplicado*/ > > Nome idade Duplicar > > Marcelo 23 + > > Marcelo 23 + > > Marcelo 23 + > > > desta maneira. > > > Grato. > > > -- > > 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 emhttp://groups.google.com/group/flexdev > > -- > [] > Júlio César Ködel G.
-- 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
