Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Manhunt

Atualizar um datagridview

Recommended Posts

Boas galera!

Eu venho aqui, pois estou com uma duvida, por causa de atualizar um datagridview, mas estou com duvidas de como fazer isso.

 

Eu estou usando um form para adicionar registos e queria que ao mesmo tempo que adiciono o registo no meu pequeno banco de dados, queria ao mesmo tempo atualizar um datagridview num outro form, que vai servir para listar todos os registos num local.

 

O código que tenho atualmente é esse:

 

    
Private Sub btgravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btgravar.Click
Dim mensagem As DialogResult

Dim myConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Agenda\Database1.mdf';" & ";Integrated Security=True;User Instance=True"

mensagem = MessageBox.Show("Quer adiconar registo?", "Gravar Registo", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

If mensagem = Windows.Forms.DialogResult.Yes Then


Dim SQL As String = "Insert into Contatos ([Codigo],[Nome], [Morada], [Telefone]) values (@Codigo, @Nome, @Morada,@Telefone);"

Dim connection As New SqlConnection(myConnectionString)

Dim command As New SqlCommand(SQL, connection)

command.Parameters.Add("@Codigo", SqlDbType.VarChar).Value = tb_codigo.Text
command.Parameters.Add("@Nome", SqlDbType.VarChar).Value = tb_Nome.Text
command.Parameters.Add("@Morada", SqlDbType.VarChar).Value = tb_morada.Text
command.Parameters.Add("@Telefone", SqlDbType.NChar).Value = tb_telefone.Text


connection.Open()

Dim x As Integer = command.ExecuteNonQuery()

If x < 1 Then
MessageBox.Show("A operação efectuada não gravou qualquer registo.")
End If
tb_codigo.clear()
tb_nome.clear()
tb_morada.clear()
tb_telefone.clear()

connection.Close()
connection = Nothing
command = Nothing
End If
End Sub

 

Cheguei em pensar acrescentar isso na parte debaixo do SQL connection, mas não sei se está correto fazer isso desse modo.

 

 

command.Parameters.Add("@Codigo", SqlDbType.VarChar).Value = Form_Agenda.DataGridview1.update()
command.Parameters.Add("@Nome", SqlDbType.VarChar).Value = Form_Agenda.DataGridview1.update()
command.Parameters.Add("@Morada", SqlDbType.VarChar).Value = Form_Agenda.DataGridview1.update()
command.Parameters.Add("@Telefone", SqlDbType.NChar).Value = Form_Agenda.DataGridview1.update()

 

Podiam-me dar uma ajuda por favor.

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta escrever isso ou tenho de identicar as colunas também?

 

E esse timer coloco quando o Form fizer Load ou ponho como tenho no código em baixo.

 

Atenção que estou acrescentando essa linha ao código já existente.

 

Acho que estou entendo o que você quer dizer, estive a ler na Web sobre esse recurso do timer, mas estou com duvida de como estruturar isso...

 

Dim command As New SqlCommand(SQL, connection)

command.Parameters.Add("@Codigo", SqlDbType.VarChar).Value = tb_codigo.Text
command.Parameters.Add("@Nome", SqlDbType.VarChar).Value = tb_Nome.Text
command.Parameters.Add("@Morada", SqlDbType.VarChar).Value = tb_morada.Text
command.Parameters.Add("@Telefone", SqlDbType.NChar).Value = tb_telefone.Text


connection.Open()

Dim x As Integer = command.ExecuteNonQuery()

If x < 1 Then
MessageBox.Show("A operação efectuada não gravou qualquer registo.")
End If
tb_codigo.clear()
tb_nome.clear()
tb_morada.clear()
tb_telefone.clear()

connection.Close()
timer.enabled = true
timer.interval = 1 + contar.toString() + " Segundos"
DataGridView1.Refresh()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa especificar nenhuma coluna, o refresh atualiza o DGV inteiro.

 

Basta criar um controle novo, um timer, setar ele para 1000 no Tick, e dentro do evento Timer.Tick você escreve:

 

form2.datagridview.Refresh()
timer1.enable=false

 

Assim ele só vai rodar uma vez e não vai comer memória.

 

No final deste seu código ai você adiciona a linha:

 

timer1.enable = true

 

Assim toda vez que você executar esta ação você ativará o timer que por sua vez atualizará o grid.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peço desculpa mas não estou conseguindo fazer isso não...

 

Este é o código que eu tenho atualmente...

 

Se calhar não estou fazendo isso bem.

Podia esclarecer o que estou fazendo mal, é que pela minha logica acho que estou fazendo bem.

 

 

Private Sub btgravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btgravar.Click
Dim mensagem As DialogResult

Dim myConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Agenda\Database1.mdf';" & ";Integrated Security=True;User Instance=True"

mensagem = MessageBox.Show("Quer adiconar registo?", "Gravar Registo", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

If mensagem = Windows.Forms.DialogResult.Yes Then


Dim SQL As String = "Insert into Contatos ([Codigo],[Nome], [Morada], [Telefone]) values (@Codigo, @Nome, @Morada,@Telefone);"

Dim connection As New SqlConnection(myConnectionString)

Dim command As New SqlCommand(SQL, connection)

command.Parameters.Add("@Codigo", SqlDbType.VarChar).Value = tb_codigo.Text
command.Parameters.Add("@Nome", SqlDbType.VarChar).Value = tb_Nome.Text
command.Parameters.Add("@Morada", SqlDbType.VarChar).Value = tb_morada.Text
command.Parameters.Add("@Telefone", SqlDbType.NChar).Value = tb_telefone.Text


connection.Open()

Dim x As Integer = command.ExecuteNonQuery()

If x < 1 Then
MessageBox.Show("A operação efectuada não gravou qualquer registo.")
End If
tb_codigo.clear()
tb_nome.clear()
tb_morada.clear()
tb_telefone.clear()

connection.Close()
connection = Nothing
command = Nothing
End If
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Frregisto.TblEntidadesDataGridView.Refresh()
Me.Timer1.Interval = 1 * 1000
Timer1.Enabled = False
End Sub

Private Sub Fragenda_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, você só colocou o timer.enabled no lugar errado:

 

 


Private Sub btgravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btgravar.Click
Dim mensagem As DialogResult

Dim myConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Agenda\Database1.mdf';" & ";Integrated Security=True;User Instance=True"

mensagem = MessageBox.Show("Quer adiconar registo?", "Gravar Registo", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

If mensagem = Windows.Forms.DialogResult.Yes Then


Dim SQL As String = "Insert into Contatos ([Codigo],[Nome], [Morada], [Telefone]) values (@Codigo, @Nome, @Morada,@Telefone);"

Dim connection As New SqlConnection(myConnectionString)

Dim command As New SqlCommand(SQL, connection)

command.Parameters.Add("@Codigo", SqlDbType.VarChar).Value = tb_codigo.Text
command.Parameters.Add("@Nome", SqlDbType.VarChar).Value = tb_Nome.Text
command.Parameters.Add("@Morada", SqlDbType.VarChar).Value = tb_morada.Text
command.Parameters.Add("@Telefone", SqlDbType.NChar).Value = tb_telefone.Text


connection.Open()

Dim x As Integer = command.ExecuteNonQuery()

If x < 1 Then
MessageBox.Show("A operação efectuada não gravou qualquer registo.")
End If
tb_codigo.clear()
tb_nome.clear()
tb_morada.clear()
tb_telefone.clear()

connection.Close()
connection = Nothing
command = Nothing
End If

Timer1.Enabled = True

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Interval = 1000
Frregisto.TblEntidadesDataGridView.Refresh()
Timer1.Enabled = False
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.