Ir para conteúdo

Arquivado

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

johnhey

dbgrid

Recommended Posts

Boas pessoas.

 

Como mencionei em algumas duvidas aqui postadas, tenho um projecto com um unico form.

O mesmo utilizo para (Cliente, empresa, Produtos, etc...)

Tenho uma variavel que me diz qual o form que esta aberto para poder funcionar os botoes nos seus devidos lugares.

 

Para abrir o form utilizo os seguintes codigos:

 

Private Sub PaisToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PaisToolStripMenuItem.Click
Try
'Verifica se o form já esta aberto e traz para frente
For Each child In Me.MdiChildren
If TypeOf child Is Registos Then
If child.Text = "Registo de Paises" Then
child.WindowState = FormWindowState.Normal
child.Focus()
tabela = "TBPais"
Exit Sub
End If
End If
Next 

'caso não esteja aberto ele abre
Dim frm As New Registos
frm.MdiParent = Me
variaveldcf = "Registo de Paises" ' atribui um valor a variavel
frm.Show()
tabela = "TBPais"
'Se der erro exibe o erro
Catch EX As Exception
MsgBox("erro - " + EX.Message)
End Try
End Sub

 

Neste formulário tem um botão de procurar que abre o formulário de pesquisa

no botão de procurar tenho os seguintes códigos:

 

Private Sub Procurar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Procurar.Click
Try
Select Case variaveldcf
Case "Registo de Paises"
Try
'Verifica se o form já esta aberto e traz para frente
For Each child In Principal.MdiChildren
If TypeOf child Is Pesquisa Then
child.WindowState = FormWindowState.Normal
child.Focus()
Exit Sub
End If
Next
'caso não esteja aberto ele abre
Dim frm As New Pesquisa
frm.MdiParent = Principal
frm.Top = "232"
frm.Left = "970"
frm.Text = "Pesquisar..."
frm.Show()
'Se der erro exibe o erro
Catch EX As Exception
MsgBox("erro - " + EX.Message)
End Try
Case "Registo de Ruas"
(....)
End Select
Catch EX As Exception
MsgBox("erro - " + EX.Message)
End Try
End Sub

 

 

O formulário de pesquisa esta a funcionar correctamente, o problema esta aqui, quando dou dois cliques sobre o registo que gostaria de visualizar ou alterar que estão relacionados no dbgrid, o mesmo deveria ser retornados para o primeiro formulário, só que não retorna nada.

já fiz um msgbox para ver se esta a funcionar, e esta correcto.

 

no dbgrid tenho:

 

Private Sub DGPesquisa_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DGPesquisa.MouseDoubleClick
'Seleciona dados no datagrid com um duplo click
regpais = DGPesquisa.CurrentRow.Cells(0).Value
Nomepaistxt = DGPesquisa.CurrentRow.Cells(1).Value
Me.dispose()
End Sub

 

 

também já tentei colocar nos seguintes eventos.

CellDoubleClick, cellmousedoubleclick, doubleclick e não retorna.

 

Caso tenham duvidas, vejam o video e se for preciso envio o projecto.

1º Video

2º Video

 

Não da nenhum erro, já tentei criar uma function a para jogar os dados e nada.

fiz um breakpoint e é como se o sistema já estivesse passado por todas as linhas de comando.

 

somente quando deixo de usar como form pai e filho que funciona.

 

Ao invés de abrir o form assim:

 

Dim frm As New Registos
frm.MdiParent = Me
variaveldcf = "Registo de Paises" ' atribui um valor a variavel
frm.Show()
tabela = "TBPais"

 

 

Abri-lo assim:

frmregisto.show()

 

Só que ai terei que fazer um form para cada tela de cadastro.

Isso não deixa o sistema pesado?

Também existe outro problema quando abro outro sistema qualquer e volto no que estava aberto os form não estão todos dentro do mdiprincipal terei que clicar na barra de tarefa para ver quais estão aberto.

E para alternar entre um form e outro também terei que deslocar me na barra de tarefas.

 

Só me respondam uma coisa, isso nunca aconteceu com ninguém?

 

O que preciso é apenas transferir com dois cliques os dados listados em um datagrid para um formulário filho.

Se alguém tiver uma outra forma de abrir formulários filhos ou outra forma de transferir os dados por favor me ajude, já estou nisto a imenso tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, isso mesmo.

 

Tenho um formulário que possui um datagrid com todos os registos para pesquisa, quando der 2 cliques sobre um dos registos, todos os dados selecionado serão jogados para um outro formulário, cada um em seu respectivo campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma variável global.

 

Dentro de qualquer formulário seu, acima de qualquer sub, mas dentro da classe, declare a seguinte variável:

 

 Public Shared dados() As String = Nothing

 

 

Para pegar os valores da row, basta você usar o comando DoubleClick ou CellDoubleClick, fazendo um código mais ou menos assim:

 

 

Private Sub DataGridView1_CellDoubleClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick

        //Pega os dados da coluna chamada <coluna1>
       dados(0) = DataGridView1.CurrentRow.Cells("<coluna1>").ToString()
       //Pega dados da <coluna2>
       dados(1) = DataGridView1.CurrentRow.Cells("<coluna2>").ToString()
       dados(2) = DataGridView1.CurrentRow.Cells("<coluna3>").ToString

End Sub

 

 

E para puxá-los de volta você pode, por exemplo, usar isto:

 

Dim nome As String = Form1.dados(0)

 

Caso queira jogar em um outro grid, uma vez preenchido o array, basta você declará-lo como datasource do seu novo grid:

 

grid2.DataSource = Form1.dados

 

Sendo que cada posição do Array será uma coluna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, fiz como você indicou, mas onde eu coloque para que campo os dados iram.

 

eu coloca assim

Registos.txtregisto.text = DataGridView1.CurrentRow.Cells("<coluna2>")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, uma vez que você tem todos os seus dados no vetor você usa:

 

Registos.txtregisto.text = dados(<numero>).ToString()

 

Entenda, os seus dados estão dentro do vetor, não precisa chamá-los diretamente.

 

Porém o método que você fez também funcionará.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Defina o vetor com tamanho, lembrando que ele começa do 0, então se você tem 3 colunas o vetor terá só duas posições:

 

Public shared dados() as string = new String(2);

 

Você vai ter 3 posições, e assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, resultou a opção de colocar um timer que sempre esta a actualizar.

Busca sempre os valores que esta na variavel e joga nos campos.

 

Essa opção veio através de uma pesquisa de um outro site.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha tentei achar onde foi que vi, agora não sei se foi aqui ou em outro site, mas a resolução é a seguinte:

 

Em uma Modulo criei:

Public <Registo> As String 'Cria a variável que carregara o numero do registo
Public <Nomepais> As String ' Cria a variável que carregara o nome do pais
Public timer As Integer

 

No formulário de Pesquisa (Datagrid) no evento Celldoubleclick:

GERAL é o nome que dei ao meu Modulo

     Try
           If geral.timer = 1 Then
               geral.index = DGPesquisa.CurrentRow.Cells(0).Value
               geral.regpais = DGPesquisa.CurrentRow.Cells(1).Value
               geral.nomepais = DGPesquisa.CurrentRow.Cells(2).Value


           Else
               geral.index = DGPesquisa.CurrentRow.Cells(0).Value
               geral.regpais = DGPesquisa.CurrentRow.Cells(1).Value
               geral.nomepais = DGPesquisa.CurrentRow.Cells(2).Value
               geral.timer = 1

           End If
           Me.Dispose()
       Catch EX As Exception
           MsgBox("erro - " + EX.Message)
       End Try

 

E no formulário que será visualizado os dados coloquei um timer com o seguinte:

 

If geral.timer = 1 Then

 txtregisto.Text = geral.regpais
 txtnome.Text = geral.nomepais
 geral.timer = 0

Else

 Exit Sub

End If

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.