Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alexandremanowar

Usando recursos do datagridview

Recommended Posts

Boa tarde

 

Eu criei um datagridview com a ajuda aqui do fórum em um post anterior e ele esta exibindo os dados perfeitamente, então resolvi criar a opção de alterar excluir adicionando os mesmo automáticamente clicando no datagridview e usando a janelinha GridView Task, nessa janela cliquei na opção Adicionar nova coluna dentro da caixa que me foi fornecida escolhi o tipo de campo CommandField e selecionei a opção Editar/Atualizar, op tipo de botão escolhi Button, feito isso ele me criou uma coluna com um botão editar, quando executo meu programa na frente de cada linha aparece o botão editar, quando eu clicar no botão editar deveria liberar para eu digitar os campos e salvar a alteração mas ao invés disso apenas me aparece as seguintes mensagens de erro:

 

Erro de Servidor no Aplicativo '/Projeto1'.

--------------------------------------------------------------------------------

 

GridView 'GridView1' acionou o evento RowEditing, que não foi tratado.

Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

 

Detalhes da Exceção: System.Web.HttpException: GridView 'GridView1' acionou o evento RowEditing, que não foi tratado.

 

Erro de Origem:

 

Exceção não tratada foi gerada durante a execução da atual solicitação da Web. As informações relacionadas à origem e ao local da exceção podem ser identificadas usando-se o rastreamento de pilha de exceção abaixo.

 

Rastreamento de Pilha:

 

 

[HttpException (0x80004005): GridView 'GridView1' acionou o evento RowEditing, que não foi tratado.]

System.Web.UI.WebControls.GridView.OnRowEditing(GridViewEditEventArgs e) +1324462

System.Web.UI.WebControls.GridView.HandleEdit(Int32 rowIndex) +43

System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +611

System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +207

System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePost

BackEvent(String eventArgument) +10

System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13

System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175

System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

 

 

 

 

--------------------------------------------------------------------------------

Informações sobre a Versão: Microsoft .NET Framework Versão:2.0.50727.3082; Versão do ASP.NET:2.0.50727.3082

resumindo esta dizendo que precido tratar algo, mas não tenho idéia do que preciso fazer para isso funcionar! Onde corrijo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae beleza

 

Cara eu estou estudando o link que você postou mas estou com algumas duvidas, a primeira é que não consigo passar seu código para C#

 

Editar

 

Protected Sub gv_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gv.RowEditing
  gvPaginas.EditIndex = e.NewEditIndex
  Grid()
End Sub
Cancelar

 

Protected Sub gv_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles gv.RowCancelingEdit
  gvPaginas.EditIndex = -1
  Grid()
End Sub
Gravar Alteração

 

Protected Sub gv_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gv.RowUpdating
  'Para pegar o valor do textBox que esta na segunda coluna da minha grid
  Dim vv As TextBox = gv.Rows(e.RowIndex).Cells(2).Controls(0) 
  Update = ""
  ExecutaComando()

  gvPaginas.EditIndex = -1
  Grid()
End Sub

E a outra dúvida é a seguinte, você criou alguma outra class ou alguma sub para auxiliar nesses eventos por exemplo no gravar alteração você chama uma sub ExecutaComando()

 

Você poderia me explicar como funciona essas rotinas acima? Os dados do meu datagriview vem a partir de um dataset, olha meu código:

Conexao ExecutaStringSQL = new Conexao();
		DataSet ListaDados = new DataSet();

		ListaDados = ExecutaStringSQL.BuscarDados("select * from senha ");



		
		GridView1.DataSource = ListaDados;
		GridView1.DataBind();

Já adicionei os botões por usando Command Field igual você deixou no seu exemplo, porém não consigo converter para c# e algumas coisa não estou entendendo se você me explicar fico grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

A conversão é bem simples, não tem segredo.

Você deve criar os eventos acima relacionando-os com sua grid, basta ir nas propriedades dela e criar os eventos.

Aqui tem um exemplo em c#: http://msdn.microsoft.com/pt-br/library/sy...rowediting.aspx

 

Referente ao ExecutaComando(), é um método que eu utilizo para executar comandos de insert, update e delete no banco.

 

Abraços..

Compartilhar este post


Link para o post
Compartilhar em outros sites

E a e cara beleza

 

Cara ainda estou perdido, eu estou entendendo a lógica, porém não entendo como montar, minhas dúvidas são as seguintes:

 

1) Preciso fazer algum tratamento no datagriview para pode usar esses métodos que você deixou de exemplo?

2) Se tiver que fazer algo onde seria feito isso? No botão Edit que adicionei?

 

Ainda estou um confuso em como montar, estou lendo aquele link do site da msdn mas aquela forma de trabalhar parece menos profissional foi feito direto no html o que não é legal, o modo que você fez esta mais claro e objetivo gostaria mesmo de entender como você fez, peço um pouco mais de paciência e um pouco mais help por favor.

 

O que preciso tratar para que aqueles eventos que você me passou para editar funcione? preciso vincular o botão edit com alguma coisa?

 

Só para melhorar esse é meu código que enche o datagridview:

Conexao ExecutaStringSQL = new Conexao();
		DataSet ListaDados = new DataSet();

		ListaDados = ExecutaStringSQL.BuscarDados("select * from tabela ");



		
		GridView1.DataSource = ListaDados;
		GridView1.DataBind();

Eu encho ele com um select feito na unha, não uso o Griview task para adicionar um banco de dados, não sei se isso faz diferença

 

Valeu pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não são métodos, são eventos da própria grid, você deve abrir a aba de propriedades da grid, depois clica no Raio que mostra os eventos e só dar um clique duplo nos eventos para ele criar o que você chamou de método, ae é só copiar e colar o código.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E a e cara valeu

 

Entendi o que você esta dizendo eu estava confundindo as coisas, criei os eventos, ficaram dessa forma:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
	{
		GridView1.EditIndex == e.NewEditIndex;
		
	}
	protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
	{
		
	}
	protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
	{

	}
Estão certos? Se estão vem as seguintes dúvidas, por exemplo no seu evento Edit vocÊ colocou o seguinte código:

 

gvPaginas.EditIndex = e.NewEditIndex
  Grid()

Esse Grid()

Isso é uma sub do vb.net certo? O que ela esta executando exatamente? No meu edit eu coloquei isso:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
	{
		GridView1.EditIndex == e.NewEditIndex;
		
	}
Mas ele marcou essa linha: GridView1.EditIndex == e.NewEditIndex;

E deu a seguinte mensagem de erro: Somente atribuições, chamadas, aumentos, diminuições e expressões de objeto novo podem ser usados como uma instrução

 

Nos outros dois eventos tive o mesmo problema que manipulação devo fazer nos eventos para eles funcionarem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você colocou dois sinais de igual (==) e só usamos dois sinais desse forma quando fazemos uma comparação, como um if.

Quando você seta o valor de alguma propriedade ou variável você utiliza apenas um igual.

 

O correto seria:

GridView1.EditIndex = e.NewEditIndex;

O Grid() é um método que eu criei que popula a grid, pode chamar o método que utilizou para alimenta-la a primeira vez que a tela foi carregada.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae cara beleza

 

Façha feia no sinal de igual! Deve ser o sono rsrsrs, cara consegui fazer o RowEdit e Cancel, estou fando o updating mas estou com dúivdas no seguinte, no seu evento de updating você colocou isso:

 

Protected Sub gv_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gv.RowUpdating
  'Para pegar o valor do textBox que esta na segunda coluna da minha grid
  Dim vv As TextBox = gv.Rows(e.RowIndex).Cells(2).Controls(0) 
  Update = ""
  ExecutaComando()

  gvPaginas.EditIndex = -1
  Grid()
End Sub

você esta pegando o valor da célula da segunda coluna porém você esta usando ele onde? Porque pelo que vejo o update= "" esta vazio e na sua sub ExecutaComando() você não esta passando valor algum! como a alteração esta sendo feito e porque vocÊ deixou o update vazio?

 

e esta linha que criei esta dando erro:

string teste = GridView1.Rows(e.RowIndex).Cells(2).Controls(0);

Esta marcando o Rows com a seguinte mensagem de erro:

O membro não invocável 'System.Web.UI.WebControls.GridView.Rows' não pode ser usado como método.

 

 

Valeu pela atenção, agora que estou entendendo esra ficando mais claro, obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu utilizei no Update, mas quando postei aqui removi para não mostrar a estrutura da minha tabela.

No c# se não me engano seu código deve ficar assim:

string teste = GridView1.Rows[e.RowIndex].Cells[2].Controls[0];

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E a e beleza

 

Certo entendi então no update, o valor que você esta pegando Dim vv As TextBox = gv.Rows(e.RowIndex).Cells(2).Controls(0) você colocou na string com sql para referencia do update, entendi.

Cara tentei esse que você colocou

GridView1.Rows[e.RowIndex].Cells[2].Controls[0];

Mas também não é nesse caso ele marca a linha inteira com erro! Deve ser outro esquema para pegar uma célular no datagridview em webform! Vou perquisar mais se você tiver alguma idéia de como pegar o valor da célular me da um toque.

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

E a e cara valeu pela força

 

Estou montando e estou com dois problemas, o meu código ficou assim:

 

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
	{
		TextBox Valor = (TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0];
		string usuario = Valor.Text;


		Conexao ExecutaStringSQL = new Conexao();
		ExecutaStringSQL.ExecutarComando("update senha set usuario='xxx' where usuario='" + usuario + "' ");  
	   

		GridView1.EditIndex = -1;
		Grid();
	}

E esta dando essa mensagem de erro:

Erro de Servidor no Aplicativo '/Projeto1'.

--------------------------------------------------------------------------------

 

Argumento de postback ou de retorno de chamada inválido. A validação do evento é habilitada com o uso de <pages enableEventValidation="true"/> na configuração ou <%@ Page EnableEventValidation="true" %> em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postback ou de retorno de chamada se originam no controle do servidor que originalmente os processou. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postback ou de retorno de chamada para validação.

Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

 

 

Procurei a opção que ele pediu para ativar: EnableEventValidation="true" ou ClientScriptManager.RegisterForEventValidation para ativar essas opções e não encontrei! Procurei algo similiar também e não encontrei, entendi que ele esta dizend que para postback de dados que são executados no servidor isso tem que ser ativado mas não esta funfando.

Porque esta dando esse erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu encontrei como resolver o problema, eu estava fazendo o caminho errado eu estava tentando no C# mas na verdade isso tem que ser feito no header do html, pelo qui entendi essa opção EnableEventValidation vem como true automaticamente no html bloqueando qualquer post parecido com esse, então eu preciso deixar assim EnableEventValidation="false" no html, ele parou de dar o problema mas acho que simplesmente desativou a função do meu botão alterar porque ele simplesmente não faz nada, vou continuar procurando mas se já existir uma solução do que tenho configurar eu agradeço se você me explicar!

 

Aproveitando o posto eu li que em trabalhos como este o certo seria usar if (!Page.IsPostBack), porque e para que serve?

 

Valeu pela atenção e vou continuar estudando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O bloco if (!Page.IsPostBack) só é acessado quando o formulário é aberto a primeira vez, se você der um reload no formulário como num click do button por exemplo o que estiver dentro desse bloco não é acessado.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo cara entendi sobre o if (!Page.IsPostBack). Mas ainda estou com problemas no botão alterar depois que adionei a opção EnableEventValidation="false" o botão simplesmente não faz nada, clico o editar ele abre as opções para edição e ativa o alterar mas ele simplesmente não faz nada! Será que alguma coisa foi desativada? Procurei no fórum o post do Oenning mas não achei, achei com esse assunto. O que pode estar danificando o botão alterar do meu projeto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.