Editar numa GridView e salvar alterações na BD - ASP.NET - Portugal-a-Programar
Editar numa GridView e salvar alterações na BD
Por oldskool, 27 de Maio de 2007 em ASP.NET
Boas pessoal, a minha dúvida, provavelmente, até é bastante básica, logo espero que não levem a mal...
O que pretendo é salvar alterações numa BD. Já tenho a Gridview com os dados e agora o que quero é, p.e., alterar um nome na BD e salvar essa alteração. O que fiz foi activar o componente EDIT à Gridview e até dá para editar, só que depois não grava para a BD. A linguagem que estou a usar é C# mas também me desenrasco bem com VB.NET. Se não quiserem ter trabalho não precisam de codar, expliquem-me só os procedimentos que devo seguir. Tenho alguma urgência visto que é o que me falta para completar o site.
Conto com a vossa ajuda e desde já antecipo o meu OBRIGADO!!
Se calhar era melhor mostrares o que tens feito pra podermos ver se tens algum erro ... assim seria melhor pra ajudar.
Não tenho aqui o código e tb n sei como fazer...o q tenho feito ja expliquei! A gridview ligada a uma datasource q faz a ligação à BD. A gridview tem uma coluna q diz edit e qd carregamos eh possível alterar os campos mas dps n sei como gravar na BD.
Mas fizeste isso com o wizard ? Ou defines o datasource no code-behind ?
Wizard claro, nem sei fazer de outra maneira...No code só mexo se for para alterar a query. Mas penso q para gravar as alterações da BD tem de ser na classe C# ou no runat server... Só preciso q me indiquem o procedimento a seguir para fazer o q pretendo, o código hei-de la chegar.
E que erro é q te dá qd tentas gravar as alteraçoes ?
estoira o site, da aquele erro com fundo amarelo e letras vermelhas, agr n me recordo o erro, como disse n tenho aqui o código, mas queria ver se me ia orientando só pela teoria...Já percebi q o teu forte eh VB.NET. Será q me podes indicar os passos a seguir para editar uma BD e gravar as alterações SFF?
Pois, dava jeito saber o erro que tens, pq tar-te a dar uma solução e continuares com o erro (q poderá vir de outro lado) é complicado. O meu forte é vb.net mas tb trabalho com C# por isso não ha problema em principio. Se seguires os seguintes passos és capaz de por isso a funcionar.
1º Criar o SqlDataSource e definires bem os campos que queres incluir na gridview (aqui convem seleccionares o campo que tem a chave primária, e caso não tenhas, usa o campo que tens para definir unicamente um registo)
2º Activar a opção Edit
3º Verifica o UpdateCommand se tem uma query válida (algo Update tabela SET campo = @campo WHERE id_campo = @id_campo)
4º Verifica os UpdateParameters (se a propriedade Name e Type em cada um está correcto consoante o que tens definido na tua base de dados)
5º Build and Run
Isto é o básico para pores a funcionar. Caso nao dê, será mesmo necessário o código ou o erro que te dá.
Não consigo por isto a funcar
Dá lá uma olhadela no código sff.
string s = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection ConnectionString = new SqlConnection(s);
SqlDataSource1.UpdateCommand = "UPDATE Carro SET marca = @marca, modelo = @modelo, ano = @ano, preco = @preco, id_dono = @id_dono WHERE marca = @marca, modelo = @modelo, ano = @ano, preco = @preco, id_dono = @id_dono ;";
GridView1.UpdateRow(2,true);
GridView1.UpdateRow(3, true);
GridView1.UpdateRow(4, true);
GridView1.UpdateRow(5, true);
GridView1.UpdateRow(6, true);
É normal que não actualize nada pq repara, tas a indicar que o registo contem os valores novos em cada campo, logo nao vai encontrar nenhum registo pra actualizar. Não precisas desse codigo pra nada se fizeres como te disse.
Não estou a perceber mesmo com se faz.
A minha dúvida está no comando UPDATE. Quando faço "UPDATE Carro SET marca = @marca, modelo = @modelo, ano = @ano, preco = @preco, id_dono = @id_dono WHERE marca = @marca, modelo = @modelo, ano = @ano, preco = @preco, id_dono = @id_dono ;" dá-me o erro de haver uma ',' no código q está mal. Como eh q ele sabe q tem de substituir o campo antigo pelo novo campo, como lhe digo qual eh o novo campo e já agora como eh q faço uma instrução DELETE para apagar p.e. um carro???? Se disponibilizares5 minutinhos para me ajudar agradecia-te imenso!!!
David.WebDeveloper 0
Na verdade eu diria que tens mais que uma vírgula mal, a menos que à frente do WHERE seja possível fazeres o que estás a fazer e eu não saiba; à frente do WHERE tem que estar uma condição lógica para que só sejam afectados os registos que verifiquem essa condição, ou seja, tens que usar operadores lógicos (AND, OR, >=, >, etc) e não vírgulas para "juntar" cada uma dessas condições. Também é à frente do WHERE que ficam definidas as relações entre cada uma das tabelas através das chaves que as relacionam e que indicas qual o registo a ser actualizado. Neste exemplo tens apenas 1 tabela apenas c om a informação do campo id_dono é condição lógica suficiente para actualizar a tabela.
Já agora, a tabela carro não tem um campo idCarro? cada dono só pode ter 1 carro!? Ok, mas por aquilo que mostras, eu diria que fica assim:
UPDATE Carro SET marca = @marca, modelo = @modelo, ano = @ano, preco = @preco WHERE id_dono = @id_dono
Claro, foi distracção/perguiça, foi tudo ao COPY PASTE saíu porcaria...Obrigado.
Mas agora quando tentei implementar uma função para o DELETE isto ñ funca. A instrução SQL q tenho é:
DELETE FROM [Carros] WHERE ID_Carro = @ID_Carro
mas n apaga nada
Como já te disse num post anterior, mostra o código que tens q é mais facil para ajudar, não é por aí uma query e adivinharmos onde é carregado o @ID_Carro ... ou como é executada a instrução.
Já descobri qual o problema. O wizard ñ estava a declarar um Datatype (q vai ser o tal campo q n tava declarado) tive de o por lá ah mão.
Pah desculpem lá, mas é a primeira vez que programo em ASP.NET, até agora tinha umas 3-4 horas disto...