Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

oldskool

Editar numa GridView e salvar alterações na BD

Mensagens Recomendadas

oldskool    0
oldskool

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tiago Salgado    2
Tiago Salgado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
oldskool    0
oldskool

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
oldskool    0
oldskool

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
oldskool    0
oldskool

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tiago Salgado    2
Tiago Salgado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
oldskool    0
oldskool

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);
    }

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tiago Salgado    2
Tiago Salgado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
oldskool    0
oldskool

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David.WebDeveloper    0
David.WebDeveloper

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
oldskool    0
oldskool

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tiago Salgado    2
Tiago Salgado

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
oldskool    0
oldskool

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade