Jump to content

[Resolvido] Atualizar DataSet-DataGridView


vastri
 Share

Recommended Posts

Olá

Estou com um problema, estou a adicionar dados na bd com instruções sql e não consigo atualizar o Dataset.

Código:

    Dim Dado1 As String = "dado1"
    Dim Dado2 As String = "dado2"
    Dim strInsert As String = "INSERT INTO Tabela (Campo1, Campo2) VALUES ('" & Dado1 & "', '" & Dado2 & "')"
    Dim Conn As New SqlConnection(ConnectionString)
    Dim Command As New SqlCommand(strInsert, Conn)
    Conn.Open()
    command.ExecuteNonQuery()
    Conn.Close()
    Conn = Nothing
    Command = Nothing

Até aqui tudo bem, acontece que tenho os dados a serem apresentados numa DataGridView e queria que ao adicionar estes aparecessem de imediato na grid o que não estou a conseguir sem fazer o fill completo do DataAdapter, o que não parece muito logico por um registo ir carregar tudo novamente!!!

Já fiz o Insert ou Update com o método Dataset » TableAdapter e assim o Dataset automaticamente atualiza e o novo dado aparece na grid, mas queria usar instruções SQL em vez do wizard do VS.

Link to comment
Share on other sites

obrigado RicardoCosta, não consegui resolver, o cenário é o seguinte, vamos supor uma tabela com milhões de registos já fiz o fill de um dataset e atribui a uma DatagridView a DataSource desse Dataset, portanto os dados estão a ser apresentados nessa DatagridView, existe aqui uma perda de performance assumida no carregamento de todos estes dados, só não queria repetir isto a cada INSERT, DELETE ou UPDATE e como não estou a conseguir colocar no Dataset o valor do INSERT (neste caso) tenho que fazer novo Fill ao Dataset, é este o problema.

Já consegui através do SqlCommandBuilder ir buscar os dados inseridos e através do Select @@IDENTITY o valor do ID mas isto tudo para a adicionar o novo dado na DatagridView não ao Dataset, com todos os dados no Dataset (lado cliente) para fazer ex. pesquisas faz todo o sentido utilizar filtros ao Dataset em vez de ir à base de dados, mas como o dado na verdade não está no Dataset (considerando que não fiz novo Fill) não dá.

Tudo isto se resume a conseguir atualizar o Dataset depois de cada INSERT, DELETE ou UPDATE sem necessidade de novo Fill, há no fórum uma serie de posts neste sentido todos eles sem resolução, deduzo que o procedimento está todo errado ou não haverá outra alternativa senão fazer o Fill.

Estou a usar Query's não conhecendo muito bem sei que há vantagens nas Stored Procedures, mas queria tentar manter como está...

Link to comment
Share on other sites

Tu só tens de fazer umas pequenas alterações ao que tens para as coisas funcionarem.

Nota, cada vez que adiciones, apages ou edites um dado terás de mexer na base de dados e no dataset.

Para o INSERT por exemplo:

Tens de alterar a tua query para "INSERT INTO Tabela (Campo1, Campo2) VALUES ('" & Dado1 & "', '" & Dado2 & "');SELECT SCOPE_IDENTITY()" e fazers um ExecuteScalar(funciona tal e qual como um ExecuteQuery, a unica diferença é que só retorna 1 unico valor). Depois de já retomares o id poderás então acrecentar ao teu dataset:

http://www.codeproject.com/Questions/335579/Adding-rows-to-Dataset-in-asp-net

Não te esqueças que tens de fazer um refresh a tua gridview para voltar a ler o dataset.

Quanto ao apagar e editar, depois de apagares da tua base de dados deves procurar no teu dataset a linha afectada e apaga-la/edita-la.

http://www.codeproject.com/Questions/247390/vb-net-finding-a-row-in-a-dataset-with-a-column-va

Mais uma vez, não te esqueças que cada vez que fizeres uma alteração ao teu dataset o mesmo só será visivel na gridview se fizeres o refresh.

Desta forma, não estarás sempre a fazer leituras a tua base de dados.

Link to comment
Share on other sites

RicardoCosta, muito obrigado é isto mesmo.... está o procedimento correto encontrado.

Já meti tudo a funcionar desta forma e claro é outra coisa, ao invés de fill, fill, fill e mais fill, estou safo estava enrascado e sem solução, foi mesmo muito útil, abraço, obrigado 👍

  • Vote 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.