Usuário com melhor resposta
DataGridView só atualiza depois que frecho e reabro a aplicação no VB2005. Como resolver?

Pergunta
-
Boa noite, amigos! Estou fazendo uma pequena aplicação que recebe dados de notas fiscais (data, CFOP, valores, etc). Criei o banco de dados(arquivo mdf), fiz a conexão dele com a aplicação no VB 2005 e inseri uns botões que chamam stored procedures para incluir, atualizar e excluir registros. Os botões estão funcionando corretamente. Num outro formulário, criei um datagridview usando o assistente do VB e marquei como fonte de dados desse grid o dataset do banco de dados. O grid mostra os dados direitinho. Porém, se eu incluir qualquer dado, o grid não é atualizado, mesmo que eu feche o form e abra novamente. No entanto, se eu fecho a aplicação e reabro, lá está o grid com os dados que eu inseri e que não apareciam. Também já li vários artigos e tutorais. Faço tudo direitinho e dá o mesmo erro. Alguém sabe como resolver?
Uso o SLQ Express 2005.Obrigado e um abraço!
Respostas
-
Boa noite,
Qual fonte de dados você está utilizando? Você atribui o valor do DataSet em algum evento da página(on load, por exemplo)?
Se você puder postar uma parte do seu código posso te ajudar melhor :)
O que eu te aconselho a fazer é logo após salvar os dados tu chamar novamente o método que carrega a grid, dessa forma tu vai exibir os registros (o que inclui o novo registro que tu inseriu).
Se a resposta for útil, não esqueça de marcar ;)
Abraço
- Editado Alexandre Rapaki quarta-feira, 3 de julho de 2013 22:03 edit
- Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:42
-
Depois de incluir o registro, tente carregar novamente os dados e depois de carregar os dados tu usa esse comando:
tuaDataGridView.refresh
se não der certo, tenta carregar tua grid usando um método assim (ou pelo menos que siga essa ideia)
Dim conn As New MySqlConnection(My.Settings.myConn) 'inicia tua conexao Dim da As New MySqlDataAdapter Dim ds As New DataSet Dim str1 As String = "select * from tableName" 'aqui tu bota o comando sql de select da.SelectCommand = New MySqlCommand(str1, conn) da.Fill(ds) conn.Close() tuaDataGridView.DataSource = ds.Tables(0)
Se a resposta for útil, não esqueça de marcar como resposta ;)
abraço
- Sugerido como Resposta Alexandre Rapaki quarta-feira, 3 de julho de 2013 23:14
- Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:41
- Não Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:41
- Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:42
Todas as Respostas
-
Boa noite,
Qual fonte de dados você está utilizando? Você atribui o valor do DataSet em algum evento da página(on load, por exemplo)?
Se você puder postar uma parte do seu código posso te ajudar melhor :)
O que eu te aconselho a fazer é logo após salvar os dados tu chamar novamente o método que carrega a grid, dessa forma tu vai exibir os registros (o que inclui o novo registro que tu inseriu).
Se a resposta for útil, não esqueça de marcar ;)
Abraço
- Editado Alexandre Rapaki quarta-feira, 3 de julho de 2013 22:03 edit
- Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:42
-
Se você estiver usando SqlDataSource para o insert você pode fazer essa chamada no evento OnInserted do SqlDataSource.
Se você estiver executando o insert no click do botão basta chamar o método que preenche a grid após inserir os dados.
Se a resposta for útil, não esqueça de marcar ;)
Abraço
-
O que eu te aconselho a fazer é logo após salvar os dados tu chamar novamente o método que carrega a grid, dessa forma tu vai exibir os registros (o que inclui o novo registro que tu inseriu).
Se a resposta for útil, não esqueça de marcar ;)
Abraço
Oi, valeu a força!
A fonte de dados é um arquivo mdf, chamado dbConfere1, que criei usando o próprio VB(new item> sqldatabase). Neste arquivo tem a tabela "tbNotaEntrada", que estou utilizando no projeto.
Bom, no evento load do form que contém o datagridview tem essa linha que, até onde entendo, coloca os dados no grid:
Me.TbNotaEntradaTableAdapter.Fill(Me.DbConfere1DataSetoutroteste.tbNotaEntrada)
Eu tentei atualizar o grid incluindo essa mesma linha no fim do evento click do botão de incluir registros, mas não funcionou.
O evento click do botao incluir(btnincluir) tem esse código:
Private Sub btnIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluir.Click
Try
'cria a conexão com o banco de dados Teste
conexao = New SqlConnection(strSql)
conexao.Open()
Dim cmd As New SqlCommand("LancaEntrada", conexao)
'define o tipo stored procedure
cmd.CommandType = CommandType.StoredProcedure
'atribui os valores dos parametros
cmd.Parameters.AddWithValue("@Action", "Insert")
cmd.Parameters.AddWithValue("@CodEmpresa", txbCodEmpresa.Text)
cmd.Parameters.AddWithValue("@Data", CDate(txbData.Text))
cmd.Parameters.AddWithValue("@CFOP", txbCFOP.Text)
cmd.Parameters.AddWithValue("@VlContabil", txbVlContabil.Text)
cmd.Parameters.AddWithValue("@BaseICMS", txbBaseICMS.Text)
cmd.Parameters.AddWithValue("@ICMS", txbICMS.Text)
cmd.Parameters.AddWithValue("@Isentas", txbIsentas.Text)
cmd.Parameters.AddWithValue("@Outras", txbOutras.Text)
cmd.Parameters.AddWithValue("@IPI", txbIPI.Text)
'executa a stored procedure
cmd.ExecuteNonQuery()
MsgBox("Lançamento incluído com sucesso!")
Catch ex As Exception
MsgBox("Erro : " & ex.Message)
Finally
conexao.Close()
End Try
End SubA stored procedure que ele chama é essa(parte destacada):
ALTER PROCEDURE dbo.LancaEntrada
@Action varchar(10),
@idLcto int=null,
@CodEmpresa int,
@Data smalldatetime,
@CFOP char(4),
@VlContabil real,
@BaseICMS real=null,
@ICMS real=null,
@Isentas real=null,
@Outras real=null,
@IPI real=null
as
begin
set nocount on;
if @Action='Insert'
begin
insert into tbNotaEntrada(CodEmpresa, Data, CFOP, VlContabil, BaseICMS, ICMS, Isentas, Outras, IPI)values(@CodEmpresa,@Data,@CFOP, @VlContabil, @BaseICMS, @ICMS, @Isentas, @Outras, @IPI)
end
else if @Action='Select'
begin
select * from tbNotaEntrada
end
else if @Action='Update'
begin
update tbNotaEntrada set CodEmpresa=@CodEmpresa,Data=@Data,CFOP=@CFOP, VlContabil=@VlContabil, BaseICMS=@BaseICMS, ICMS=@ICMS, Isentas=@Isentas, Outras=@Outras, IPI=@IPI where IdLcto=@idLcto
end
else if @action='delete'
begin
delete from tbNotaEntrada where idlcto=@idlcto
end
end
abraço!
-
Se você estiver executando o insert no click do botão basta chamar o método que preenche a grid após inserir os dados.
Tentei colocá-lo no evento click, como você sugeriu, ele só "preenche" de novo, mas com os dados antigos.
Valeu!
abraço! -
Depois de incluir o registro, tente carregar novamente os dados e depois de carregar os dados tu usa esse comando:
tuaDataGridView.refresh
se não der certo, tenta carregar tua grid usando um método assim (ou pelo menos que siga essa ideia)
Dim conn As New MySqlConnection(My.Settings.myConn) 'inicia tua conexao Dim da As New MySqlDataAdapter Dim ds As New DataSet Dim str1 As String = "select * from tableName" 'aqui tu bota o comando sql de select da.SelectCommand = New MySqlCommand(str1, conn) da.Fill(ds) conn.Close() tuaDataGridView.DataSource = ds.Tables(0)
Se a resposta for útil, não esqueça de marcar como resposta ;)
abraço
- Sugerido como Resposta Alexandre Rapaki quarta-feira, 3 de julho de 2013 23:14
- Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:41
- Não Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:41
- Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:42
-
Opa! Valeu, amigo! O refresh não funcionou. carreguei o grid com o código que vc passou, mas tb não funcinou. Aí, tirei o refresh e coloquei o código pra carregar o grid no botão incluir. Funcionou!. A cada novo registro inserido, ele carrega o grid todinho de novo. Muito obrigado pela ajuda.
Um abraço! -