Manhunt 0 Denunciar post Postado Outubro 1, 2012 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
KhaosDoctor 242 Denunciar post Postado Outubro 1, 2012 Use o DatagridView.Refresh() dentro de um timer. Compartilhar este post Link para o post Compartilhar em outros sites
Manhunt 0 Denunciar post Postado Outubro 1, 2012 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
KhaosDoctor 242 Denunciar post Postado Outubro 1, 2012 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
Manhunt 0 Denunciar post Postado Outubro 5, 2012 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
KhaosDoctor 242 Denunciar post Postado Outubro 5, 2012 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