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.

Kamolas
25-04-2007, 22:59
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.

trikton
25-04-2007, 23:01
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.

cabiros
26-04-2007, 01:39
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.

cabiros
26-04-2007, 18:16
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

trikton
26-04-2007, 19:55
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?

trikton
27-04-2007, 19:07
É 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

gooden
07-05-2007, 15:09
espero k isto te ajude

Me.DataGridView1.DataSource = dataset
Me.DataGridView1.DataMember = "dados"

trikton
08-05-2007, 21:55
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?

gooden
09-05-2007, 09:51
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)

trikton
09-05-2007, 19:27
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