none
DataGridView só atualiza depois que frecho e reabro a aplicação no VB2005. Como resolver? RRS feed

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

    quarta-feira, 3 de julho de 2013 21:44

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
    quarta-feira, 3 de julho de 2013 21:58
  • 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
    quarta-feira, 3 de julho de 2013 23:11

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
    quarta-feira, 3 de julho de 2013 21:58
  • 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

    quarta-feira, 3 de julho de 2013 22:08
  • 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 Sub

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

    quarta-feira, 3 de julho de 2013 22:50

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


    Pois é! Eu tentei fazer. O método é esse: Me.TbNotaEntradaTableAdapter.Fill(Me.DbConfere1DataSetoutroteste.tbNotaEntrada) ?
    Tentei colocá-lo no evento click, como você sugeriu, ele só "preenche" de novo, mas com os dados antigos. 
    Valeu! 
    abraço!
    • Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:42
    • Não Marcado como Resposta NoxVNI quarta-feira, 3 de julho de 2013 23:42
    quarta-feira, 3 de julho de 2013 22:56
  • 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
    quarta-feira, 3 de julho de 2013 23:11
  • 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!
    quarta-feira, 3 de julho de 2013 23:41
  • Que ótimo!

    Sempre que precisar estamos ai! ;)

    Abraço!

    quarta-feira, 3 de julho de 2013 23:46