Duvida para remover elementos de um DataGrid no Flex

10 respostas
T

boa tarde pessoal, sou iniciante e estou com uma dificuldade para remover elementos de um dataGrid atravez de um botão "Remove" eu nao sei oq passar para o dataProveider, tenho 2 tabNavigators um dentro do outro eo botao fica fora deles, nao sei se é necessario pesquisar os index dos navigators primeiro. Obrigado

<fx:Script>
		<![CDATA[
			import br.com.entidades.Aluno;
			import br.com.entidades.Curso;
			import br.com.entidades.Funcionario;
			
			import mx.collections.ArrayCollection;
			import mx.controls.dataGridClasses.DataGridColumn;
			import mx.events.FlexEvent;
			import mx.events.ItemClickEvent;
			import mx.utils.StringUtil;
			
			import spark.events.IndexChangeEvent;
			
			var arrayCollectionCursos:ArrayCollection = new ArrayCollection();
			var arrayCollectionAluno:ArrayCollection = new ArrayCollection();
			var arrayCollectionFuncionario:ArrayCollection = new ArrayCollection();
			
			private function limparCamposCursos():void{
				txtNomeCurso.text = txtDuracao.text = txtNumeroVagas.text = "";
				cmbPeriodoCurso.selectedItem = null;
			}
			private function limparCamposAluno():void{
				txtNomeAluno.text = txtEnderecoAluno.text = txtCpfAluno.text = txtEmailAluno.text =txtDatNascAluno.text =
					txtNumeroAluno.text = txtRgAluno.text = txtTelefoneAluno.text = "";
					
			}
			private function limparCamposFuncionario():void{
				txtFuncCargo.text = txtFuncCPF.text = txtFuncDataNasc.text = txtFuncEndereco.text = txtFuncNome.text = txtFuncRG.text =
				txtFuncSalario.text = "";
				
			}
			private function dropdownList(item:Aluno):String{
				return StringUtil.substitute("{0}",item.nome);
			}
			
			[Bindable]public var periodo:ArrayCollection = new ArrayCollection([
				{label:"Diurno", data:1}, 
				{label:"Noturno", data:2}, 
				{label:"Diurno / Noturno", data:3} ]);
			
			[Bindable]public var consulta1:ArrayCollection = new ArrayCollection([
				{label:"Curso", data:1}, 
				{label:"Aluno", data:2}, 
				{label:"Professor", data:3},
				{label:"Funcionário", data:4},
				{label:"Notas", data:5}]);
			
			
			private function closeHandler(event:IndexChangeEvent):void {
				
				if(list2.selectedItem.label == "Curso"){
					
						var colunas:Array = new Array();
						
						var col1:DataGridColumn = new DataGridColumn();
						col1.dataField = "nome";
						col1.headerText = "Nome do Curso";
						
						var col2:DataGridColumn = new DataGridColumn();
						col2.dataField = "numeroVagas";
						col2.headerText = "Numero Vagas";
						
						var col3:DataGridColumn = new DataGridColumn();
						col3.dataField = "periodo";
						col3.headerText = "Periodo";
						
						
						var col4:DataGridColumn = new DataGridColumn();
						col4.dataField = "duracao";
						col4.headerText = "Duração";
						
						colunas.push(col1);
						colunas.push(col2);
						colunas.push(col3);
						colunas.push(col4);
						
						dgConsultas.columns = colunas;
						dgConsultas.dataProvider = arrayCollectionCursos;
						dgConsultas.visible = true;
				}
				else
					if(list2.selectedItem.label == "Aluno"){
						var Colunas:Array = new Array();
						
						
						var col1:DataGridColumn = new DataGridColumn();
						col1.dataField ="nome";
						col1.headerText = "Nome";
						
						var col2:DataGridColumn = new DataGridColumn();
						col2.dataField = "endereco";
						col2.headerText = "Endereço";
						
						var col3:DataGridColumn = new DataGridColumn();
						col3.dataField = "numero";
						col3.headerText = "Número";
						
						var col4:DataGridColumn = new DataGridColumn();
						col4.dataField = "cpf";
						col4.headerText = "CPF";
						
						var col5:DataGridColumn = new DataGridColumn();
						col5.dataField = "rg";
						col5.headerText = "RG";
						
						var col6:DataGridColumn = new DataGridColumn();
						col6.dataField = "dataNasc";
						col6.headerText = "Data de Nascimento";
						
						var col7:DataGridColumn = new DataGridColumn();
						col7.dataField = "telefone";
						col7.headerText = "Telefone";
						
						var col8:DataGridColumn = new DataGridColumn();
						col8.dataField = "sexo";
						col8.headerText = "Sexo";
						
						Colunas.push(col1);
						Colunas.push(col2);
						Colunas.push(col3);
						Colunas.push(col4);
						Colunas.push(col5);
						Colunas.push(col6);
						Colunas.push(col7);
						Colunas.push(col8);
						
						dgConsultas.columns = Colunas;
						dgConsultas.dataProvider = arrayCollectionAluno;
						dgConsultas.visible = true;
					}
					else
						if(list2.selectedItem.label == "Funcionário"){
							var Colunas2:Array = new Array();
							
							var col1:DataGridColumn = new DataGridColumn();
							col1.dataField ="nome";
							col1.headerText = "Nome";
							
							var col2:DataGridColumn = new DataGridColumn();
							col2.dataField = "endereco";
							col2.headerText = "Endereço";
							
							var col3:DataGridColumn = new DataGridColumn();
							col3.dataField = "cargo";
							col3.headerText = "Cargo";
							
							var col4:DataGridColumn = new DataGridColumn();
							col4.dataField = "cpf";
							col4.headerText = "CPF";
							
							var col5:DataGridColumn = new DataGridColumn();
							col5.dataField = "rg";
							col5.headerText = "RG";
							
							var col6:DataGridColumn = new DataGridColumn();
							col6.dataField = "dataNascimento";
							col6.headerText = "Data de Nascimento";
							
							var col7:DataGridColumn = new DataGridColumn();
							col7.dataField = "salario";
							col7.headerText = "Salário";
							
							var col8:DataGridColumn = new DataGridColumn();
							col8.dataField = "sexo";
							col8.headerText = "Sexo";
							
							Colunas2.push(col1);
							Colunas2.push(col2);
							Colunas2.push(col3);
							Colunas2.push(col4);
							Colunas2.push(col5);
							Colunas2.push(col6);
							Colunas2.push(col7);
							Colunas2.push(col8);
							
							dgConsultas.columns = Colunas2;
							dgConsultas.dataProvider = arrayCollectionFuncionario;
							dgConsultas.visible = true;
			}
			

			}
			
			protected function btnInserir_clickHandler(event:MouseEvent):void
			{
				if(tabPrincipal.selectedIndex == 1){
					
					if(tabCadastro.selectedIndex == 0){
						
						var curso:Curso = new Curso();
						curso.nome = txtNomeCurso.text;
						curso.numeroVagas = Number(txtNumeroVagas.text);
						curso.duracao = Number(txtDuracao.text);
						curso.periodo = cmbPeriodoCurso.selectedItem.label;
						
						arrayCollectionCursos.addItem(curso);
						
						limparCamposCursos();
					}
					else 
					if(tabCadastro.selectedIndex == 1){
						
						var aluno:Aluno = new Aluno();
						aluno.nome = txtNomeAluno.text;
					    aluno.endereco = txtEnderecoAluno.text;
						aluno.cpf = Number(txtCpfAluno.text);
						aluno.email = txtEmailAluno.text;
						aluno.dataNasc = Number(txtDatNascAluno.text);
						aluno.numero = Number(txtNumeroAluno.text);
						aluno.rg = Number(txtRgAluno.text);
						
						if(radiogroup1.selectedValue == "fem"){
							aluno.sexo = "Feminino";
						}
						else
							aluno.sexo = "Masculino";
						
						aluno.telefone = Number(txtTelefoneAluno.text);
					
						arrayCollectionAluno.addItem(aluno);
						limparCamposAluno();
					}else
						if(tabCadastro.selectedIndex == 2){
							var func:Funcionario = new Funcionario();
							func.nome = txtFuncNome.text;
							func.endereco = txtFuncEndereco.text;
							func.cargo = txtFuncCargo.text;
							func.cpf = Number(txtFuncCPF.text);
							func.rg = Number(txtFuncRG.text);
							func.dataNascimento = Number(txtFuncDataNasc.text);
							func.salario = Number(txtFuncSalario.text);
							
							if(radiogroup2.selectedValue == "fem1"){
								func.sexo1 = "Feminino";
							}
							else
								func.sexo1 = "Masculino";
							
							arrayCollectionFuncionario.addItem(func);
							limparCamposFuncionario();
					
						}		
				}
			}	


			[Bindable] private var rItem:ArrayCollection = new ArrayCollection();
			{
				public function deleteItem(event:MouseEvent):void{      
		        rItem.removeItemAt(dgConsultas.selectedIndex);
				rItem.refresh();
			}
			}

			protected function btnRemover_clickHandler(event:MouseEvent):void
			{

			}

		]]>
		
	</fx:Script>

10 Respostas

Ivan_Alves

é melhor setar um dataprovider para sua tabela ai quando precisar de deletar um item deleta direto da sua ArrayCollection que está setado com sua tabela ai para deletar faça assim:

//para deletar faça suaArrayCollection.removeItem(suaTabela.selectedItem);

quanto a pesquisar o indice dos TabNavigators, eu faria isso também!

flw!

T
eu n entendi muito bem, mais eu fiz
dgConsulta.dataProveider={arrayCollectionCurso}
e na função remove do botao
if(tabPrincipal.selectedIndex == 2){
					
					if(tabCadastro.selectedIndex == 0){	
					arrayCollectionCursos.removeItemAt(dgConsultas.selectedItem());
			}
				}
ai compila mais quando clico no botao da um erro de ActionScript... =/
Ivan_Alves

qual erro?

T

Erro de ActionScript [Descartar Tudo] [Continuar]

TypeError: Error #1006: value não é uma função.
at br.com.projetotcc::Consultas/btnRemover_clickHandler()[C:\workspace\ProjetoCadastro\src\br\com\projetotcc\Consultas.mxml:296]
at br.com.projetotcc::Consultas/__btnRemover_click()[C:\workspace\ProjetoCadastro\src\br\com\projetotcc\Consultas.mxml:453]

obrigado pela ajuda até aki rs

Ivan_Alves

Foi mal é porque o método da sua ArrayCollection "removeItemAt" recebe como parametro um tipo inteiro para indicar seu indice e no caso esse está passando um tipo Object então ficaria assim:

suaArrayCollection.removeItemAt(suaTabela.selectedIndex);

fiz um exemplo simples em Flex 3 demostrando o funcionamento:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			
			//bindable é necessário para atualizar o que estiver vinculado a essa variavel automaticamente
			[Bindable]
			private var lista:ArrayCollection = new ArrayCollection([{nome:"Ivan", estado:"GO"}, {nome:"Teste", estado:"MG"}, {nome:"Teste3", estado:"SP"}]);
			
			private function removerItem():void{
				lista.removeItemAt(tabela.selectedIndex);
			}
			
		]]>
	</mx:Script>
	<mx:DataGrid x="10" y="10" dataProvider="{lista}" id="tabela">
		<mx:columns>
			<mx:DataGridColumn headerText="Nome" dataField="nome"/>
			<mx:DataGridColumn headerText="Estado" dataField="estado"/>
		</mx:columns>
	</mx:DataGrid>
	<mx:Button x="10" y="174" label="Remover" click="removerItem()"/>
</mx:Application>

Observe que a variavel do tipo ArrayCollection deve ser "Bindable".

Se você estiver usando Flex 3 indico essa apostila aqui que é pequena mais ensina muito
[url]http://www.oficinadanet.com.br/apostilas/detalhe/663/apostila_adobe_flex_a_partir_do_zero[/url]
flw!

Bruno_Cebim

Titata,

Explique o que você quer fazer e o contexto da sua aplicação que te ajudo a organizar isso, você está se perdendo em vários pontos.

[]'s

T
eu tentei testar cada dataProvider e remover mais o unico q funciona eo arrayCollectionCurso, soh na tela de curso q remove os items
if(tabPrincipal.selectedIndex == 2){
					
					if(tabCadastro.selectedIndex == 0){
		//				if(dgConsultas.dataProvider == arrayCollectionAluno){
		//					arrayCollectionAluno.removeItemAt(arrayCollectionAluno.getItemIndex(dgConsultas.selectedItem));
		//				}else
			//				if(dgConsultas.dataProvider == arrayCollectionCursos){
								arrayCollectionCursos.removeItemAt(arrayCollectionCursos.getItemIndex(dgConsultas.selectedItem));
								
								//			}else
								//				if(dgConsultas.dataProvider == arrayCollectionFuncionario){
								//					arrayCollectionFuncionario.removeItemAt(arrayCollectionFuncionario.getItemIndex(dgConsultas.selectedItem));
								//				}else
								//						arrayCollectionProfessor.removeItemAt(arrayCollectionProfessor.getItemIndex(dgConsultas.selectedItem));
								//					
								
							}	
							
						
					}
					
				}
Ivan_Alves

Se você tem outros ArrayCollection com atributos diferentes o melhor seria é criar uma datagrid para cada um, já que a datagrid só pode receber uma ArrayCollection por vez!
Por exemplo se você fez assim:

//datagrid recebe ArrayCollection1
suaDataGrid.dataProvider = suaArrayCollection1;

//mesma datagrid recebe ArrayCollection2
suaDataGrid.dataProvider = suaArrayCollection2;

Nesse caso apenas a última dataProvider está vinculada a sua dataGrid que contém a "suaArrayCollection2", flw!

T
vlw ivan e cebim esqueci de posta aki q tinha conseguido vlw pela ajuda fiz da seguinte maneira
if(tabPrincipal.selectedIndex == 2){
					
					
					if(dgConsultas.selectedItem as Curso){
						arrayCollectionCursos.removeItemAt(arrayCollectionCursos.getItemIndex(dgConsultas.selectedItem));
					}else if(dgConsultas.selectedItem as Professor){
						arrayCollectionProfessor.removeItemAt(arrayCollectionProfessor.getItemIndex(dgConsultas.selectedItem));
					}else if(dgConsultas.selectedItem as Aluno){
						arrayCollectionAluno.removeItemAt(arrayCollectionAluno.getItemIndex(dgConsultas.selectedItem));
					}else if(dgConsultas.selectedItem as Funcionario){
						arrayCollectionFuncionario.removeItemAt(arrayCollectionFuncionario.getItemIndex(dgConsultas.selectedItem));
					}
				
				}
ganondorfan

Depois que você remover o item da coleção (dataProvider) da um:

minhaDataGrid.validadeNow();
Criado 30 de agosto de 2011
Ultima resposta 27 de set. de 2011
Respostas 10
Participantes 4