Inquiridor
Update Personalizado no GridView

Pergunta
-
Blz galera!
O meu problema eh o seguinte:
Tenho um GridView conectado a um ObjectDataSource. O Grid apresenta uma consulta com 5 colunas, porém quando eu clicar em editar eu quero atualizar apenas um campo de uma coluna. Até ai tudo bem. Soh que o metodo que eu tenho para atualizar aceita como parametro apenas o ID e o campo o qual quero atualizar, dai o erro que acontece pois ao clicar em update aparece um erro dizendo que o método tem poucos parametros.Como faço para resolver isso. Tem como eu personalizar o evento rowUpdating? Como faço para pegar o ID do registro?
Todas as Respostas
-
Olá Thiago,
Tem como sim, viu, o seguinte, faça uma stored Procedure para o update, onde nela vc crie blocos de códigos, onde se vc receber um único parâmetro, aqle será "atualizado". Qlqr duvida entre em contato.
Ex.:
SET NOCOUNT ON; if ( @campo is null ) or (@campo= '' ) Update dbo.Enderecos.id, dbo.Enderecos.uf, dbo.Enderecos.localidadenu, dbo.Enderecos.logradouro, dbo.Enderecos.cep, dbo.Enderecos.logcomp, dbo.Enderecos.tipo, dbo.Bairro.bairro , dbo.Cidades.localidade FROM dbo.Enderecos INNER JOIN dbo.Bairro ON dbo.Enderecos.bairronu = dbo.Bairro.id INNER JOIN dbo.Cidades ON dbo.Enderecos.localidadenu = dbo.Cidades.id ORDER BY dbo.Enderecos.Logradouro else if (@campo = 'cep' ) Begin Update dbo.Enderecos.id, dbo.Enderecos.uf, dbo.Enderecos.localidadenu, dbo.Enderecos.logradouro, dbo.Enderecos.cep, dbo.Enderecos.logcomp, dbo.Enderecos.tipo, dbo.Bairro.bairro , dbo.Cidades.localidade FROM dbo.Enderecos INNER JOIN dbo.Bairro ON dbo.Enderecos.bairronu = dbo.Bairro.id INNER JOIN dbo.Cidades ON dbo.Enderecos.localidadenu = dbo.Cidades.id WHERE dbo.Enderecos.cep = @conteudo ORDER BY dbo.Enderecos.cep End else -
Olá Thiago,
Tem como sim, viu, o seguinte, faça uma stored Procedure para o update, onde nela vc crie blocos de códigos, onde se vc receber um único parâmetro, aqle será "atualizado". Qlqr duvida entre em contato.
Ex.:
SET NOCOUNT ON; if ( @campo is null ) or (@campo= '' ) Update dbo.Enderecos.id, dbo.Enderecos.uf, dbo.Enderecos.localidadenu, dbo.Enderecos.logradouro, dbo.Enderecos.cep, dbo.Enderecos.logcomp, dbo.Enderecos.tipo, dbo.Bairro.bairro , dbo.Cidades.localidade FROM dbo.Enderecos INNER JOIN dbo.Bairro ON dbo.Enderecos.bairronu = dbo.Bairro.id INNER JOIN dbo.Cidades ON dbo.Enderecos.localidadenu = dbo.Cidades.id ORDER BY dbo.Enderecos.Logradouro else if (@campo = 'cep' ) Begin Update dbo.Enderecos.id, dbo.Enderecos.uf, dbo.Enderecos.localidadenu, dbo.Enderecos.logradouro, dbo.Enderecos.cep, dbo.Enderecos.logcomp, dbo.Enderecos.tipo, dbo.Bairro.bairro , dbo.Cidades.localidade FROM dbo.Enderecos INNER JOIN dbo.Bairro ON dbo.Enderecos.bairronu = dbo.Bairro.id INNER JOIN dbo.Cidades ON dbo.Enderecos.localidadenu = dbo.Cidades.id WHERE dbo.Enderecos.cep = @conteudo ORDER BY dbo.Enderecos.cep End else(...)
-
-
-
-
Olá Thiago,
Seguinte, me explica direito então, vc qr recuperar o DataKeyName dentro do evento RowUpdating, mas primeiro vc está usando q controle para fazer a atualização no gridview? tipo se vc estiver usando um dataSource para preencher o gridview, vc pode no insert criar uma variavel output e armazena-la em uma Session... E ai vc pode fazer com que sempre que ele vá atualizar ele recupere a session.. e atualiza o campo, baseado naqle script para dar update em campos variados.
Ok??
Se não for o que eu entendi e usando o dataSource... me explique melhor.
Abraços
-
É o seguinte:
- Eu tenho o GridView conectado a um ObjectDataSource. O GridView mostra 3 colunas, pórem eu quero o método que que o ObjectDataSource está acessando atualiza recebe como parametros apenas o ID e um dos campos. Só que quando eu clico em "Update" dentro no Grid dá erro pq ele passa mais parâmetros.
- Entao eu estava pensando em personalizar o evento RowUpdating para receber apenas o campo que preciso, o ID e chamar o método de dentro do evento.
Blz?
-
-
-
Bom Thiago,
Faça o seguinte, armazene a DataKEyName em uma variavel de Sessão. Session("KeyName") = DataKey .... e faça a stored procedure do jeito que descrevi acima, com os campos de sua necessidade, e fazendo com que ela avalie os campos que irá receber para dar update. pq assim os únicos campos que ela irá atualizar serão aqles recebidos pelo parâmetro. Não sobrecarregará a página nem irá dar erro por excesso de parametros. Não tem erro.
Qlqr coisa me passa seu msn ou email e tentarei te explicar melhor. Pode ser?
Abraços.
-
No evento selectedindexchange do grid
DataKeyArray keys = grvPecas.DataKeys;
int codEntidade = int.Parse(keys[grvPecas.SelectedIndex]["ENTIDADE_CODIGO"].ToString());
int codPeca = int.Parse(keys[grvPecas.SelectedIndex]["PECAS_CODIGO"].ToString());