• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

oldskool

Editar numa GridView e salvar alterações na BD

16 mensagens neste tópico

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!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se calhar era melhor mostrares o que tens feito pra podermos ver se tens algum erro ... assim seria melhor pra ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas fizeste isso com o wizard ? Ou defines o datasource no code-behind ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que erro é q te dá qd tentas gravar as alteraçoes ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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á.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consigo por isto a funcar  ;)

Dá lá uma olhadela no código sff.

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string s = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection ConnectionString = new SqlConnection(s);
        ConnectionString.Open();

        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 ;";
        
        ConnectionString.Close();


        GridView1.UpdateRow(2,true);
        GridView1.UpdateRow(3, true);
        GridView1.UpdateRow(4, true);
        GridView1.UpdateRow(5, true);
        GridView1.UpdateRow(6, true);
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá!  :P

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora