Só remendando um erro meu: Infelizmente o Flex não possue a interface ICloneable, então a função clone é específica da sua classe.
Confundi com .net onde tenho a interface ICloneable =) A única desvantagem disso é que você não conseguiria automatizar a clonagem de objetos em uma função genérica (mas também nada impede do seu aplicativo definir a interface ICloneable... é apenas um facilitador e nem importa muito para o teu caso). 2010/1/22 Lorenzi <[email protected]> > 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 > -- [] 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
