Ir para conteúdo
Fórum Script Brasil
  • 0

Form pesquisa dentro do form original


Carlos Rocha

Pergunta

Ola pessoal.

Peguei o tutorial que esta em http://www.macoratti.net/08/06/vbn_psv2.htm, e resolvi colocar o form de pesquisa que la esta no formulario de cadastro de clientes.

Meu código abaixo, faz a filtragem normal e exibe no gridview normal mas na hora que eu vou selecionar o registro no grid e entregar ao formulario, simplesmente não funciona.

O que será que esta faltando?

Meu código:

Private Sub P_Nome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_Nome.TextChanged
        Try
            Dim sql As String = "Select * from " & tabela & " where Nome like '" & P_Nome.Text & "%'"
            ds = accDb.ExecuteDS(sql, tabela)
            DGWClientes.DataSource = ds.Tables(0).DefaultView
        Catch ex As Exception
            MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click
        Dim linha As Integer = DGWClientes.CurrentRow.Index
        'Obtem o elemento da coluna ClienteID
        Dim P_Codigo As String = DGWClientes.Item("ClienteID", linha).Value.ToString
        'Definimos como OK o resultado da janela de diálogo
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
    End Sub

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Esse eu já matei mas agora deu um problema.

No código quie puz para resolver este problema, tem um linha que me retorna o valor do clienteID que esta na tabela do banco de dados. O problema é que não esta me retornando o valor do clienteID mas sim quantos resultados foram aferidos na consulta exposta no grid.

Por exemplo:

No grid sairam os id's: 01, 02, 03 e 05

Caso eu selecione no grid o id 05, o código abaixo esta me retornando 04 pois é o 04 registro a ser listado no grid.

Como resolvo isso?

Private Sub P_Nome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_Nome.TextChanged
        Try
            Dim sql As String = "Select * from " & tabela & " where ativo='S' and nome like '" & P_Nome.Text & "%'"
            ds = accDb.ExecuteDS(sql, tabela)
            DGWClientes.DataSource = ds.Tables(0).DefaultView
        Catch ex As Exception
            MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click
        Dim linha As Integer = DGWClientes.CurrentRow.Index
        'Obtem o elemento da coluna ClienteID
        registro = DGWClientes.Item("clienteID", linha).Value - 1
        exibirDados(registro)
    End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

já que ninhguem ainda respondeu, vou tentar ser mais específico.

Normalmente, a gente faz um formulario para cadastro de clientes e nele, um botão localizar que abre outro formulario para pesquiza de clientes certo?

Nesse formulario de pesquisa, quando selecionamos no gridview o cliente que queremos e clikamos no botão selecionar, a rotina pega o id desse cliente, fecha o form de pesquisa e exibe os dados do cliente selecionado no form de cadastro de clientes. Certo?

Pois bem. Eu resolvi, em vez de criar um form separado para pesquisa, criar um panel no proprio form de cadastro de clientes.

Tudo ocorre normalmente, exceto um coisa:

Após a pesquisa entrgar os dados do cliente escolhido para o form de cadastro, caso eu clique no botão alterar do form para alterar o registro vindo da parte da pesquisa, caso o registro anterior tenha sido excluido, a rotina diz que o registro anterior não existe.

Porem, isso só acontece com no caso da ediçao com registros que vem do form de pesquisa.

Caso eu navegue pelos botões, proximo anterior... até esse mesmo registro, aí não da erro.

Exemplo:

registro na tabela:

clientes exibidos:

01, 02, 03 e 05 (o 04 foi deletado)

Se eu escolher os clientes de 01 a 03 no form de pesquisa, a edição funciona normal. Mas, se escolher o 05, ai ele diz que não existe registro na posição 04. Mas, isso só acontece quan do o registro é alterado vin do do form de pesquisa.

O que pode estar errado?

Link para o comentário
Compartilhar em outros sites

  • 0

pessoal, matei mais essa ficou assim:>

Private Sub P_Nome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_Nome.TextChanged
        Try
            Dim sql As String = "Select * from " & tabela & " where ativo='S' and nome like '" & P_Nome.Text & "%'"
            ds = accDb.ExecuteDS(sql, tabela)
            DGWClientes.DataSource = ds.Tables(0).DefaultView
        Catch ex As Exception
            MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click
        Dim linha As Integer = DGWClientes.CurrentRow.Index
        'Obtem o elemento da coluna ClienteID
        registro = DGWClientes.Item("ClienteID", linha).Value.ToString - 1
        Dim i As Integer = dt.Rows.Count - 1
        If registro > i Then registro = i
        exibirDados(registro)
    End Sub

Agora. Poque coloco nas propriedades do form para ele abrir maximizado e ele n ão abre?

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Pessoal.

Sou iniciante em .Net e to precisando de uma luz tua ai fazendo um favor:

Peguei teu tuto http://www.macoratti.net/08/05/vbn8_psv.htm.

Normalmente, a gente faz um formulário para cadastro de clientes e nele, um botão localizar que abre outro formulário para pesquisa(como você fez no tuto) de clientes certo?

Nesse formulário de pesquisa, quando selecionamos no gridview o cliente que queremos e clikamos no botão selecionar, a rotina pega o id desse cliente, fecha o form de pesquisa e exibe os dados do cliente selecionado no form de cadastro de clientes. Certo?

Pois bem. Eu resolvi, em vez de criar um form separado para pesquisa, criar um panel no próprio form de cadastro de clientes.

Tudo ocorre normalmente, exceto um coisa:

Após a pesquisa entregar os dados do cliente escolhido para o form de cadastro, caso eu clique no botão alterar do form para alterar o registro vindo da parte da pesquisa, caso o registro anterior tenha sido excluído, a rotina diz que o registro anterior não existe. Daí tentei pegar pelo posição do registro mas não deu também pois essa posição não é a do cadastro e sim da pesquisa. No mnomento em que eu faço o filtro no textbox ai o registro toma outra posição.

Porem, isso só acontece com no caso da edição com registros que vem do form de pesquisa.

Caso eu navegue pelos botões, próximo anterior... até esse mesmo registro, aí não da erro.

Exemplo:

registro na tabela:

clientes exibidos:

01, 02, 03 e 05 (o 04 foi deletado)

Se eu escolher os clientes de 01 a 03 no form de pesquisa, a edição funciona normal. Mas, se escolher o 05, ai ele diz que não existe registro na posição 04. Mas, isso só acontece quando o registro é alterado vindo do form de pesquisa.

O que pode estar errado?

O foco é na ultima parte La embaixo onde ta assim:

Private Sub P_Nome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_Nome.TextChanged
        Try
            Dim sql As String = "Select * from " & tabela & " where ativo='S' and nome like '" & P_Nome.Text & "%'"
            ds = accDb.ExecuteDS(sql, tabela)
            DGWClientes.DataSource = ds.Tables(0).DefaultView
        Catch ex As Exception
            MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click
        registro = DGWClientes.CurrentRow.Index
        exibirDados(registro)
    End Sub
Bom, segue meu código completo:
Imports MySql.Data.MySqlClient
Public Class Clientes
    Dim accDb As New DBConnection
    Dim registro As Integer
    Dim dr As DataRow
    Dim dt As DataTable
    Dim ds As DataSet = Nothing
    Dim tabela As String = "Clientes"

    Public Sub habilita()
        For Each c As Control In Me.grpClientes.Controls
            If TypeOf c Is TextBox Then
                c.Enabled = True
            End If
        Next
    End Sub
    Public Sub desabilita()
        For Each c As Control In Me.grpClientes.Controls
            If TypeOf c Is TextBox Then
                c.Enabled = False
            End If
        Next
    End Sub
    Private Sub atribuirDados(ByVal dr As DataRow)
        dr("clienteID") = Codigo.Text
        dr("nome") = Nome.Text
        dr("endereco") = Endereco.Text
        dr("email") = Email.Text
    End Sub

    Private Sub exibirDados(ByVal m As Integer)
        Dim i As Integer = dt.Rows.Count - 1
        If m < 0 OrElse i < 0 Then Exit Sub
        Dim dr As DataRow = dt.Rows(m)

        Codigo.Text = dr("clienteID")
        Nome.Text = dr("nome")
        Endereco.Text = dr("endereco")
        Email.Text = dr("email")
    End Sub

    Private Sub Clientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            Dim sql As String = "Select * from " & tabela & " where ativo='S'"
            ds = accDb.ExecuteDS(sql, tabela)
            dt = ds.Tables(tabela)
            DGWClientes.DataSource = ds.Tables(0).DefaultView
            registro = dt.Rows.Count - 1
            exibirDados(registro)
            desabilita()
            If dt.Rows.Count = 0 Then
                Primeiro.Enabled = False
                Anterior.Enabled = False
                Proximo.Enabled = False
                Ultimo.Enabled = False
                Atualizar.Enabled = False
                Eliminar.Enabled = False
                Pesquisar.Enabled = False
            End If
            If dt.Rows.Count > 0 Then
                registro = 0
                Primeiro_Click(Nothing, Nothing)
            Else
                registro = -1
            End If
        Catch ex As Exception
            MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub Primeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primeiro.Click
        registro = 0
        exibirDados(registro)
    End Sub

    Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Anterior.Click
        registro = registro - 1
        If registro < 0 Then registro = 0
        exibirDados(registro)
    End Sub

    Private Sub Proximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Proximo.Click
        Dim i As Integer = dt.Rows.Count - 1
        registro = registro + 1
        If registro > i Then registro = i
        exibirDados(registro)
    End Sub

    Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimo.Click
        registro = dt.Rows.Count - 1
        exibirDados(registro)
    End Sub

    Private Sub Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click
        If Novo.Text = "Novo" Then
            For Each c As Control In Me.grpClientes.Controls
                If TypeOf c Is TextBox Then
                    c.Text = ""
                End If
            Next
            Atualizar.Enabled = False
            Eliminar.Enabled = False
            Encerrar.Text = "Cancela"
            Novo.Text = "Incluir"
            habilita()
            Nome.Focus()
            Codigo.Enabled = False
        ElseIf Novo.Text = "Incluir" Then
            dr = dt.NewRow
            incluirRegistro(dr)
            Novo.Text = "Novo"
            Encerrar.Text = "Encerrar"
            Atualizar.Enabled = True
            Eliminar.Enabled = True
            desabilita()
        End If
    End Sub
    Private Sub incluirRegistro(ByVal dr As DataRow)
        Dim sql As String = "INSERT INTO " & tabela & " (nome,endereco,email,ativo)VALUES ('" & Nome.Text & "','" & Endereco.Text & "','" & Email.Text & "','S')"
        ds = accDb.ExecuteDS(sql, tabela)
        Try
            MessageBox.Show("registro de Usuário incluido com sucesso.")
            exibirDados(registro)
        Catch ex As Exception
            MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
        End Try
    End Sub

    Private Sub Clientes_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
        'permitir que a mudança de um campo para outro do formulário seja possível com o pressionamento da tecla ENTER 
        If e.KeyChar = Convert.ToChar(13) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub

    Private Sub Atualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Atualizar.Click
        If Atualizar.Text = "Atualizar" Then
            registro = registro
            Novo.Enabled = False
            Eliminar.Enabled = False
            Encerrar.Text = "Cancela"
            Atualizar.Text = "Salvar Alteração"
            Nome.Focus()
            habilita()
            Codigo.Enabled = False
        ElseIf Atualizar.Text = "Salvar Alteração" Then
            Dim kk As String = registro
            Codigo.Enabled = False
            If registro < 0 OrElse registro > dt.Rows.Count - 1 Then Exit Sub
            dr = dt.Rows(registro)
            atualizarRegistro(dr)
            Atualizar.Text = "Atualizar"
            Encerrar.Text = "Encerrar"
            Novo.Enabled = True
            Eliminar.Enabled = True
            desabilita()
        End If
    End Sub
    Private Sub atualizarRegistro(ByVal dr As DataRow)
        atribuirDados(dr)
        Dim kk As String = registro
        Dim sql As String = "UPDATE " & tabela & " SET nome = '" & Nome.Text & "',endereco= '" & Endereco.Text & "',email = '" & Email.Text & "' where clienteID='" & dr("clienteID") & "'"
        ds = accDb.ExecuteDS(sql, tabela)
        exibirDados(registro)
        Try
            MessageBox.Show("registro de Usuário alterado com sucesso.")
        Catch ex As Exception
            MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
        End Try
    End Sub

    Private Sub Eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Eliminar.Click
        If registro < 0 OrElse registro > dt.Rows.Count - 1 Then
            Exit Sub
        Else
            If MessageBox.Show("Deseja Excluir esse registro", "Excluir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                Dim codigo As Integer
                Dim dr As DataRow = dt.Rows(registro)
                codigo = dr("clienteID")
                codigo = CType(codigo.ToString, Integer)
                eliminarRegistro(codigo)
            End If
        End If
    End Sub
    Private Sub eliminarRegistro(ByVal codigo As Integer)
        Dim sql As String = "UPDATE " & tabela & " SET ativo = 'N' where clienteID = " & codigo
        ds = accDb.ExecuteDS(sql, tabela)
        Proximo_Click(Nothing, Nothing)
        Try
            MessageBox.Show("registro de Usuário excluido com sucesso.")
        Catch ex As Exception
            MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
        End Try
    End Sub

    Private Sub Encerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Encerrar.Click
        If Encerrar.Text = "Encerrar" Then
            If MessageBox.Show("Deseja encerrar a aplicação", "Encerrar", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                If ds.HasChanges Then
                    ds.AcceptChanges()
                End If
                Me.Close()
            End If
        ElseIf Encerrar.Text = "Cancela" Then
            desabilita()
            Encerrar.Text = "Encerrar"
            Atualizar.Enabled = True
            Eliminar.Enabled = True
            Novo.Text = "Novo"
            Novo.Enabled = True
            Atualizar.Text = "Atualizar"
            Anterior_Click(Nothing, Nothing)
        End If
    End Sub

    Private Sub P_Nome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_Nome.TextChanged
        Try
            Dim sql As String = "Select * from " & tabela & " where ativo='S' and nome like '" & P_Nome.Text & "%'"
            ds = accDb.ExecuteDS(sql, tabela)
            DGWClientes.DataSource = ds.Tables(0).DefaultView
        Catch ex As Exception
            MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click
        registro = DGWClientes.CurrentRow.Index
        exibirDados(registro)
    End Sub
End Class

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...