View Full Version : datagrid vb.net 2005
estrafalhote 25-04-2007, 18:39 boas
eu tenho uma datagrid que está ligada a uma base de dados, e que cada vez que insiro dados na base de dados esses mesmos dados não aparecem na datagrid e eu gostaria de saber como fazer um refresh automático cada vez que inserir dados na base de dados, porque para poder ver os dados que acabei de inserir na base de dados tenho de fechar esse form e voltar a abri-lo que aí já aparecem os dados.
Após inserires os dados podes fazer chamar novamente o evento load do form, ou voltar a chamar o procedimento que faz a ligação da datagrid à BD.
Boas,
Essa datagrid não estará associada a uma tabela num dataset? Caso esteja, para actualizares os dados visiveis no datagrid, tens de actualizar o dataset. É que por exemplo, fazendo um INSERT Directamente na base de dados, não vai mudar o dataset carregado previamente.
E já experimentaste fazer a formatação da datagrid? Cada campo da tabela associado a cada coluna na datagrid. E depois no load da Form chamas o metodo. do estilo "Formatacaodatagrid()" depois de fazer o try do dataset.
estrafalhote 26-04-2007, 17:51 vocês não me estão a perceber eu consigo inserir os dados na BD só que se eu inserir qualquer coisa na BD ela não aparece automáticamente no Datagrid só se eu fechar o form e abri-lo de novo aí é que aparecem os dados que eu inseri na BD.
AH bom :)
Então faz nomedatagridview.refresh() depois de gravar os dados. penso que resolve.
asa_delta 26-04-2007, 19:14 pk é k ao fim de fazer um insert não fazes um Get á tabela onde inseris-te os valores, basta chamar a função no kal carregas a datagrid
vocês não me estão a perceber eu consigo inserir os dados na BD só que se eu inserir qualquer coisa na BD ela não aparece automáticamente no Datagrid só se eu fechar o form e abri-lo de novo aí é que aparecem os dados que eu inseri na BD.
Inserir dados numa base de dados não significa necessáriamente que estejas a inserir os dados no dataset ao qual a datagrid esta associada..
Uma coisa é a base de dados.. outra coisa é o dataset, que aparece como uma cópia total ou parcial da base de dados física, na memória do pc
estrafalhote 26-04-2007, 20:51 Inserir dados numa base de dados não significa necessáriamente que estejas a inserir os dados no dataset ao qual a datagrid esta associada..
Uma coisa é a base de dados.. outra coisa é o dataset, que aparece como uma cópia total ou parcial da base de dados física, na memória do pc
já que pareces entendido na matéria se não fosse pedir muito poderias explicar me a diferença e como resolver o meu problema?
SoundSurfer 26-04-2007, 21:07 Há tantas maneirs de fazer o que explicaste em cima, que tens de explicar melhor exactamente o que estás a fazer.
estrafalhote 26-04-2007, 21:29 Há tantas maneirs de fazer o que explicaste em cima, que tens de explicar melhor exactamente o que estás a fazer.
eu tenho um programa com acesso a uma BD que na qual eu quero inserir dados através do programa só que eu quando insiro dados no programa eles não aparecem logo no datagrig só eu fechando o form e tornando a abri lo é que aparecem todos os dados que eu inseri, e eu queria que eles aparecem mal eu os inserisse
SoundSurfer 26-04-2007, 21:57 eu tenho um programa com acesso a uma BD que na qual eu quero inserir dados através do programa só que eu quando insiro dados no programa eles não aparecem logo no datagrig só eu fechando o form e tornando a abri lo é que aparecem todos os dados que eu inseri, e eu queria que eles aparecem mal eu os inserisse
Vou reformular a minha pergunta... tens de explicar melhor Como o estás a fazer.
estrafalhote 26-04-2007, 22:49 Vou reformular a minha pergunta... tens de explicar melhor Como o estás a fazer.
eu tenho um datagrid que através de um dataset está ligado a uma BD.
e para escrever na BD tenho este código:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dbConn As OleDb.OleDbConnection = New OleDb.OleDbConnection()
Try
dbConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd pap.mdb;"
Dim strQuery As String = "INSERT INTO produtos (nome, quantidadestock, preco, caracteristicas, idcategoria, idfornecedor) VALUES(@nome, @quantidadestock, @preco, @caracteristicas, @idcategoria, @idfornecedor)"
Dim dbCmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(strQuery, dbConn)
dbCmd.Parameters.AddWithValue("@nome", txtnome.Text)
dbCmd.Parameters.AddWithValue("@quantidadestock", txtquantidadestock.Text)
dbCmd.Parameters.AddWithValue("@preco", txtpreco.Text)
dbCmd.Parameters.AddWithValue("@caracteristicas", txtcaracteristicas.Text)
dbCmd.Parameters.AddWithValue("@idcategoria", cbCategoria.SelectedValue)
dbCmd.Parameters.AddWithValue("@idfornecedores", cbFornecedor.SelectedValue)
dbConn.Open()
dbCmd.ExecuteNonQuery()
dbCmd = Nothing
MessageBox.Show("Inseriu", "Inseriu", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
Catch ex As Exception
MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
Finally
dbConn.Close()
End Try
End Sub
e eu agora gostaria de saber como fazer para aparecerem os dados mal eu os insira
já fui explicito?
SoundSurfer 26-04-2007, 23:13 falta o código de ler os dados para a datagrid, que em princípio terás de chamar outra vez depois do "dbConn.Close()"
estrafalhote 26-04-2007, 23:25 falta o código de ler os dados para a datagrid, que em princípio terás de chamar outra vez depois do "dbConn.Close()"
desculpa la ser chato mas como eu não percebo lá muito disto podias me dar uma ideia do código que tenho de usar?
É o que te tinha dito.. o INSERT coloca os dados directamente na base de dados, mas não no dataset que tens em memória.
Tens de ir ao tableadapter da tabela que está associada ao teu datagrid e executar o comando Fill, para preencheres o teu dataset com uma copia dos dados da BD.
Isso tem de estar feito na função k carrega o datagrid, ou no load do formulário.
Procura e faz um copy paste logo após o código de inserção.
estrafalhote 07-05-2007, 14:04 É o que te tinha dito.. o INSERT coloca os dados directamente na base de dados, mas não no dataset que tens em memória.
Tens de ir ao tableadapter da tabela que está associada ao teu datagrid e executar o comando Fill, para preencheres o teu dataset com uma copia dos dados da BD.
Isso tem de estar feito na função k carrega o datagrid, ou no load do formulário.
Procura e faz um copy paste logo após o código de inserção.
alguém me podia explicar isto mais explicitamente é que eu como estou a auto-aprender é complicado, por isso é que estou a pedir a vossa ajuda
espero k isto te ajude
Me.DataGridView1.DataSource = dataset
Me.DataGridView1.DataMember = "dados"
Basicamente é o que se segue, mas substitui pelos teus nomes de variaveis.
------------------------------------------------------------------------
1 - Código de inserção de dados na Base de dados
' já feito por ti
2 - Actualização do Dataset com os dados carregados
'Fazer isto depois do código de inserção de dados
me.tableadapter.Fill(mydataset, "Tabela de dados")
'Atendendo a que:
'Me.DataGridView1.DataSource = mydataset
'Me.DataGridView1.DataMember = "Tabela de dados"
'
'e que o tableadapter foi criado com a connection string correcta e o comando sql que vai 'buscar a informação que pretendes á respectiva tabela associada á datagrid
-----------------------------------------------------------------------------
Isto deve de estar um pouco confuso, mas a informação tá toda aqui.
Basicamente é voltares a correr o código de inicialização da datagrid, após a inserção de dados.
estrafalhote 09-05-2007, 07:51 Basicamente é o que se segue, mas substitui pelos teus nomes de variaveis.
------------------------------------------------------------------------
1 - Código de inserção de dados na Base de dados
' já feito por ti
2 - Actualização do Dataset com os dados carregados
'Fazer isto depois do código de inserção de dados
me.tableadapter.Fill(mydataset, "Tabela de dados")
'Atendendo a que:
'Me.DataGridView1.DataSource = mydataset
'Me.DataGridView1.DataMember = "Tabela de dados"
'
'e que o tableadapter foi criado com a connection string correcta e o comando sql que vai 'buscar a informação que pretendes á respectiva tabela associada á datagrid
-----------------------------------------------------------------------------
Isto deve de estar um pouco confuso, mas a informação tá toda aqui.
Basicamente é voltares a correr o código de inicialização da datagrid, após a inserção de dados.
funcionou perfeitamente com umas pequenas alterações mas já bomba.
agora alguém me pode explicar como apagar dados da bd através do datagrid?
só que eu queria tipo escolher um produto e carregar num botão e os dados desse produto apagavam se, alguem me pode ajudar?
eu pessoalmente nunca fiz isso porke nao gosto mt de funcionar cm datagrids apenas so para relatorios ou assim.... mas axo k poderas ter ajuda neste site
www.vbforums.com (http://www.vbforums.com)
Se tiveres a chave primária do elemento que pretendes eliminar inserida na datagrid, basta:
Código do botão apagar:
1 - Detectar qual a linha da datagrid seleccionada
2 - Obter o valor da Cell que contém a chave primária que identifica univocamente o elemento a remover.
3 - Criar um comando SQL que apague o respectivo elemento.
Algo do género:
"DELETE FROM [Tabela de Dados] WHERE ID_Produto = " & me.dataset.table("Dados").rows.item(0).Cell(0).value.tostring
E executas esta nonquery..
Nota: este código pode n estar 100% correcto, pk foi escrito aki á pressão, mas a ideia tá toda lá ;)
Cumps
|
|