none
Como separar nomes DataGridView RRS feed

  • Pergunta

  • Ola Preciso separar Responsavel com seus beneficiarios de um datagridview e colocar em um textbox, só que quando separo, ocorre duplicação de alguns registros

    meu código

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Adicionar colunas
            With DataGridView1
    
                .Columns.Add("CPF", "CPF")
                .Columns(0).Width = 150
                .Columns.Add("NomeResponsavel", "NomeResponsavel")
                .Columns(1).Width = 190
                .Columns.Add("NomeCrianca", "NomeCrianca")
                .Columns(2).Width = 190
    
    
    
            End With
            ' Adicionando linhas
            DataGridView1.Rows.Add(10)
    
            'Adicionando dados ao grid
            DataGridView1.Rows(0).Cells(0).Value = "02398979784"
            DataGridView1.Rows(1).Cells(0).Value = "02398979784"
            DataGridView1.Rows(2).Cells(0).Value = "02476853640"
            DataGridView1.Rows(3).Cells(0).Value = "02772956962"
            DataGridView1.Rows(4).Cells(0).Value = "03244072704"
            DataGridView1.Rows(5).Cells(0).Value = "03244072704"
            DataGridView1.Rows(6).Cells(0).Value = "03244072704"
            DataGridView1.Rows(7).Cells(0).Value = "03614306801"
            DataGridView1.Rows(8).Cells(0).Value = "04259946609"
            DataGridView1.Rows(9).Cells(0).Value = "04259946609"
            DataGridView1.Rows(10).Cells(0).Value = "05402838860"
    
    
    
            DataGridView1.Rows(0).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(1).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(2).Cells(1).Value = "Pedro Nunes"
            DataGridView1.Rows(3).Cells(1).Value = "Fernanda Macedo"
            DataGridView1.Rows(4).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(5).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(6).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(7).Cells(1).Value = "Enrico Fauze"
            DataGridView1.Rows(8).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(9).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(10).Cells(1).Value = "GUSTAVO ZANARDI "
    
    
            DataGridView1.Rows(0).Cells(2).Value = "Fernando Vilela"
            DataGridView1.Rows(1).Cells(2).Value = "Patricia Vilela"
            DataGridView1.Rows(2).Cells(2).Value = "Rafael Nunes"
            DataGridView1.Rows(3).Cells(2).Value = "Marcela Macedo"
            DataGridView1.Rows(4).Cells(2).Value = "Vitor Cavalieri Teixeira"
            DataGridView1.Rows(5).Cells(2).Value = "Franciana Cavalieri Teixeira"
            DataGridView1.Rows(6).Cells(2).Value = "Jair Cavalieri Teixeira"
            DataGridView1.Rows(7).Cells(2).Value = "Marcos Fauze"
            DataGridView1.Rows(8).Cells(2).Value = "Greta Chicarino"
            DataGridView1.Rows(9).Cells(2).Value = "Adam Chicarino "
            DataGridView1.Rows(10).Cells(2).Value = "Olavo Zanardi"
    
    
    
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim CPF, NomeResponsavel, NomeCrianca As String
    
    
            For w = 0 To DataGridView1.Rows.Count - 1
    
    
                CPF = DataGridView1.Rows(w).Cells(0).Value.ToString.Trim()
                NomeResponsavel = DataGridView1.Rows(w).Cells(1).Value.ToString.Trim()
                NomeCrianca = DataGridView1.Rows(w).Cells(2).Value.ToString.Trim()
    
                TextBox1.Text += "RESPONSAVEL: " & NomeResponsavel & _
                        vbNewLine & _
                        "CPF: " & CPF & vbNewLine
    
                For L = 0 To DataGridView1.Rows.Count - 1
    
    
    
                    If CPF = DataGridView1.Rows(L).Cells(0).Value Then
                        TextBox1.Text = TextBox1.Text & _
                          "BENEFICIARIO: " & NomeCrianca & vbNewLine
    
                    End If
    
    
    
                Next
    
                TextBox1.Text += vbNewLine
    
            Next
    
    
    
    
    
        End Sub
    
    

    E faz isso

    E o que eu quero seria isso

    Obrigada

    quarta-feira, 22 de janeiro de 2014 14:22

Respostas

  • Andreia, o problema está no laço FOR ("L=0"). Ele vai passar por todas as linhas, comparar o CPF e então escrever no nome do beneficiário. O problema é que ele não vai excluir dessa lista a linha em que ele está.

    Outra coisa é a repetição de responsáveis. Você vai passar de linha em linha escrevendo, sem saber se você já escreveu aquele responsável antes ou não - a tarefa do laço FOR ("W=0").

    Você precisa primeiro criar uma lista, e então buscar elementos NÃO REPETIDOS de responsáveis (de beneficiários não precisa porque eles já são únicos).

    Primeiro, crie uma estrutura assim:

    Private Structure Responsavel
            Friend CPF As String
            Friend Nome As String
            Friend Beneficiarios() As String
    
            Friend Shared Function Procurar(ByRef List As System.Collections.ObjectModel.Collection(Of Responsavel), ByRef CPF As String) As Responsavel
                For Each R As Responsavel In List
                    If R.CPF = CPF Then Return R
                Next R
                Return Nothing
            End Function
    
            Friend Sub Adicionar(ByRef Beneficiario As String)
                ReDim Preserve Me.Beneficiarios(0 To Me.Beneficiarios.Length)
                Me.Beneficiarios(Me.Beneficiarios.Length - 1) = Beneficiario
            End Sub
    
            Friend Sub New(ByRef CPF As String, ByRef Nome As String, ByRef Beneficiario As String)
                Me.CPF = CPF
                Me.Nome = Nome
                Me.Beneficiarios = New String() {Beneficiario}
            End Sub
        End Structure

    Ai então você vai guardar uma lista de Responsáveis e, para cada linha da tabela, antes você vai buscar nessa lista se o Responsável já existe (comparando o CPF). Se sim, então você vai adicionar o beneficiário a ele, senão você adiciona o responsável e já adiciona o com o primeiro beneficiário.

    O button1.Click ficaria assim:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim List As New System.Collections.ObjectModel.Collection(Of Responsavel)
            For Each Row As DataGridViewRow In DataGridView1.Rows
                With Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
                    If .CPF = "" Then
                        List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value)))
                    Else
                        .Adicionar(CStr(Row.Cells(2).Value))
                    End If
                End With
            Next Row
            Dim Text As String = ""
            For Each R As Responsavel In List
                Text += "RESPONSAVEL: " + R.Nome + vbNewLine + "CPF: " + R.CPF + vbNewLine
                For Each B As String In R.Beneficiarios
                    Text += "BENEFICIARIO: " + B + vbNewLine
                Next B
            Next R
            TextBox1.Text = Text
        End Sub

    Eu coloquei o Texto primeiro em uma String para depois passar para o TextBox para evitar o disparo de eventos de alteração do texto, e eu prefiro usar "ByRef" ao invés de "ByVal" (que é padrão), mas apenas por preferência - só uso "ByVal" quando não tem jeito.

    Coloque tudo dentro do From (a declaração da estrutura também - porque marquei como "Private", senão troque para "Friend" ou "Public" como preferir).

    Espero ter ajudado.

    • Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 10:20
    • Não Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 10:47
    • Editado SammuelMiranda sexta-feira, 24 de janeiro de 2014 11:13 Solução mais completa.
    • Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 11:13
    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 20:15
    sexta-feira, 24 de janeiro de 2014 10:20
  • Andreia, realmente e já identifiquei o erro.

    O que acontece, eu fiz o "Responsavel" como Structure, e nesse caso quando retorno o valor da função procurar, mesmo que eu adicione um item a lista de benefíciários dentro dela, eu teria que recolocar a Estrutura de volta na posição em que ela estava na variável "List". Para fazer isso teriamos que eliminar o bloco "With", colocar o valor em uma variável e analisar para saber se recolocamos na variável "List" ou não.

    Para elimitar este trabalho todo, simplifiquei: troque no código a "Structure" por uma "Class" e no procedimento do botão, troque o bloco por:

    For Each Row As DataGridViewRow In DataGridView1.Rows
        Dim Procurado As Responsavel = Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
        If Procurado Is Nothing Then
            List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value)))
        Else
            Procurado.Adicionar(CStr(Row.Cells(2).Value))
        End If
    Next Row

    Veja que agora eu compara o "Procurado" com "Nothing", se fosse uma estrutura isso seria impossível (por isso estava comparando a variável CPF - assim funciona, testado já).

    Espero ter ajudado.

    • Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 22:19
    • Marcado como Resposta AndreiaMeiga sábado, 25 de janeiro de 2014 19:45
    • Não Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 00:41
    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 20:15
    sexta-feira, 24 de janeiro de 2014 22:18
  • Isso mesmo Sammuel, muito obrigada. Agora vou tentar fazer 2 coisas, primeiro entender bem esse código

    ainda estou aprendendo Vb.net, e depois vou tentar aproveitar esse código para gerar um arquivo txt, nessa mesma lógica.

    Fica o código , caso alguém quiser

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Adicionar colunas
            With DataGridView1
    
                .Columns.Add("CPF", "CPF")
                .Columns(0).Width = 150
                .Columns.Add("NomeResponsavel", "NomeResponsavel")
                .Columns(1).Width = 190
                .Columns.Add("NomeCrianca", "NomeCrianca")
                .Columns(2).Width = 190
    
    
    
            End With
            ' Adicionando linhas
            DataGridView1.Rows.Add(10)
    
            'Adicionando dados ao grid
            DataGridView1.Rows(0).Cells(0).Value = "02398979784"
            DataGridView1.Rows(1).Cells(0).Value = "02398979784"
            DataGridView1.Rows(2).Cells(0).Value = "02476853640"
            DataGridView1.Rows(3).Cells(0).Value = "02772956962"
            DataGridView1.Rows(4).Cells(0).Value = "03244072704"
            DataGridView1.Rows(5).Cells(0).Value = "03244072704"
            DataGridView1.Rows(6).Cells(0).Value = "03244072704"
            DataGridView1.Rows(7).Cells(0).Value = "03614306801"
            DataGridView1.Rows(8).Cells(0).Value = "04259946609"
            DataGridView1.Rows(9).Cells(0).Value = "04259946609"
            DataGridView1.Rows(10).Cells(0).Value = "05402838860"
    
    
    
            DataGridView1.Rows(0).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(1).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(2).Cells(1).Value = "Pedro Nunes"
            DataGridView1.Rows(3).Cells(1).Value = "Fernanda Macedo"
            DataGridView1.Rows(4).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(5).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(6).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(7).Cells(1).Value = "Enrico Fauze"
            DataGridView1.Rows(8).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(9).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(10).Cells(1).Value = "GUSTAVO ZANARDI "
    
    
            DataGridView1.Rows(0).Cells(2).Value = "Fernando Vilela"
            DataGridView1.Rows(1).Cells(2).Value = "Patricia Vilela"
            DataGridView1.Rows(2).Cells(2).Value = "Rafael Nunes"
            DataGridView1.Rows(3).Cells(2).Value = "Marcela Macedo"
            DataGridView1.Rows(4).Cells(2).Value = "Vitor Cavalieri Teixeira"
            DataGridView1.Rows(5).Cells(2).Value = "Franciana Cavalieri Teixeira"
            DataGridView1.Rows(6).Cells(2).Value = "Jair Cavalieri Teixeira"
            DataGridView1.Rows(7).Cells(2).Value = "Marcos Fauze"
            DataGridView1.Rows(8).Cells(2).Value = "Greta Chicarino"
            DataGridView1.Rows(9).Cells(2).Value = "Adam Chicarino "
            DataGridView1.Rows(10).Cells(2).Value = "Olavo Zanardi"
    
    
    
    
        End Sub
    
    
        Private Class Responsavel
            Friend CPF As String
            Friend Nome As String
            Friend Beneficiarios() As String
    
            Friend Shared Function Procurar(ByRef List As System.Collections.ObjectModel.Collection(Of Responsavel), ByRef CPF As String) As Responsavel
                For Each R As Responsavel In List
                    If R.CPF = CPF Then Return R
                Next R
                Return Nothing
            End Function
    
            Friend Sub Adicionar(ByRef Beneficiario As String)
                ReDim Preserve Me.Beneficiarios(0 To Me.Beneficiarios.Length)
                Me.Beneficiarios(Me.Beneficiarios.Length - 1) = Beneficiario
            End Sub
    
            Friend Sub New(ByRef CPF As String, ByRef Nome As String, ByRef Beneficiario As String)
                Me.CPF = CPF
                Me.Nome = Nome
                Me.Beneficiarios = New String() {Beneficiario}
            End Sub
        End Class
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim List As New System.Collections.ObjectModel.Collection(Of Responsavel)
            For Each Row As DataGridViewRow In DataGridView1.Rows
                Dim Procurado As Responsavel = Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
                If Procurado Is Nothing Then
                    List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value)))
                Else
                    Procurado.Adicionar(CStr(Row.Cells(2).Value))
                End If
            Next Row
            Dim Text As String = ""
            For Each R As Responsavel In List
                Text += "RESPONSAVEL: " + R.Nome + vbNewLine + "CPF: " + R.CPF + vbNewLine
                For Each B As String In R.Beneficiarios
                    Text += "BENEFICIARIO: " + B + vbNewLine
                Next B
            Next R
            TextBox1.Text = Text
    
        End Sub
    
    
    End Class
    

    Muito obrigada a todos

    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 00:44
    • Não Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 00:44
    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 20:14
    sábado, 25 de janeiro de 2014 19:45

Todas as Respostas

  • Andreia, o problema está no laço FOR ("L=0"). Ele vai passar por todas as linhas, comparar o CPF e então escrever no nome do beneficiário. O problema é que ele não vai excluir dessa lista a linha em que ele está.

    Outra coisa é a repetição de responsáveis. Você vai passar de linha em linha escrevendo, sem saber se você já escreveu aquele responsável antes ou não - a tarefa do laço FOR ("W=0").

    Você precisa primeiro criar uma lista, e então buscar elementos NÃO REPETIDOS de responsáveis (de beneficiários não precisa porque eles já são únicos).

    Primeiro, crie uma estrutura assim:

    Private Structure Responsavel
            Friend CPF As String
            Friend Nome As String
            Friend Beneficiarios() As String
    
            Friend Shared Function Procurar(ByRef List As System.Collections.ObjectModel.Collection(Of Responsavel), ByRef CPF As String) As Responsavel
                For Each R As Responsavel In List
                    If R.CPF = CPF Then Return R
                Next R
                Return Nothing
            End Function
    
            Friend Sub Adicionar(ByRef Beneficiario As String)
                ReDim Preserve Me.Beneficiarios(0 To Me.Beneficiarios.Length)
                Me.Beneficiarios(Me.Beneficiarios.Length - 1) = Beneficiario
            End Sub
    
            Friend Sub New(ByRef CPF As String, ByRef Nome As String, ByRef Beneficiario As String)
                Me.CPF = CPF
                Me.Nome = Nome
                Me.Beneficiarios = New String() {Beneficiario}
            End Sub
        End Structure

    Ai então você vai guardar uma lista de Responsáveis e, para cada linha da tabela, antes você vai buscar nessa lista se o Responsável já existe (comparando o CPF). Se sim, então você vai adicionar o beneficiário a ele, senão você adiciona o responsável e já adiciona o com o primeiro beneficiário.

    O button1.Click ficaria assim:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim List As New System.Collections.ObjectModel.Collection(Of Responsavel)
            For Each Row As DataGridViewRow In DataGridView1.Rows
                With Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
                    If .CPF = "" Then
                        List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value)))
                    Else
                        .Adicionar(CStr(Row.Cells(2).Value))
                    End If
                End With
            Next Row
            Dim Text As String = ""
            For Each R As Responsavel In List
                Text += "RESPONSAVEL: " + R.Nome + vbNewLine + "CPF: " + R.CPF + vbNewLine
                For Each B As String In R.Beneficiarios
                    Text += "BENEFICIARIO: " + B + vbNewLine
                Next B
            Next R
            TextBox1.Text = Text
        End Sub

    Eu coloquei o Texto primeiro em uma String para depois passar para o TextBox para evitar o disparo de eventos de alteração do texto, e eu prefiro usar "ByRef" ao invés de "ByVal" (que é padrão), mas apenas por preferência - só uso "ByVal" quando não tem jeito.

    Coloque tudo dentro do From (a declaração da estrutura também - porque marquei como "Private", senão troque para "Friend" ou "Public" como preferir).

    Espero ter ajudado.

    • Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 10:20
    • Não Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 10:47
    • Editado SammuelMiranda sexta-feira, 24 de janeiro de 2014 11:13 Solução mais completa.
    • Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 11:13
    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 20:15
    sexta-feira, 24 de janeiro de 2014 10:20
  • Muito obrigada Samuel, aprendi muito com seu código, mas tem um detalhe.

    No meu exemplo, e pegando o RESPONSAVEL MARCOS VILELA, ele tem 2 beneficiarios.

    Então, nesse caso eu preciso que no grid fique assim

    RESPONSAVEL: Marcos Vilela
    CPF: 02398979784
    BENEFICIARIO: Fernando Vilela

    BENEFICIARIO: Patricia Vilela

    ou seja, tem que aparecer os 2 (ou mais se tiver) beneficiarios do Marcos Vilela. No seu exemplo esta ficando assim (aparecendo apenas 1 benefeciario)


    sexta-feira, 24 de janeiro de 2014 20:40
  • Andreia, realmente e já identifiquei o erro.

    O que acontece, eu fiz o "Responsavel" como Structure, e nesse caso quando retorno o valor da função procurar, mesmo que eu adicione um item a lista de benefíciários dentro dela, eu teria que recolocar a Estrutura de volta na posição em que ela estava na variável "List". Para fazer isso teriamos que eliminar o bloco "With", colocar o valor em uma variável e analisar para saber se recolocamos na variável "List" ou não.

    Para elimitar este trabalho todo, simplifiquei: troque no código a "Structure" por uma "Class" e no procedimento do botão, troque o bloco por:

    For Each Row As DataGridViewRow In DataGridView1.Rows
        Dim Procurado As Responsavel = Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
        If Procurado Is Nothing Then
            List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value)))
        Else
            Procurado.Adicionar(CStr(Row.Cells(2).Value))
        End If
    Next Row

    Veja que agora eu compara o "Procurado" com "Nothing", se fosse uma estrutura isso seria impossível (por isso estava comparando a variável CPF - assim funciona, testado já).

    Espero ter ajudado.

    • Sugerido como Resposta SammuelMiranda sexta-feira, 24 de janeiro de 2014 22:19
    • Marcado como Resposta AndreiaMeiga sábado, 25 de janeiro de 2014 19:45
    • Não Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 00:41
    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 20:15
    sexta-feira, 24 de janeiro de 2014 22:18
  • Isso mesmo Sammuel, muito obrigada. Agora vou tentar fazer 2 coisas, primeiro entender bem esse código

    ainda estou aprendendo Vb.net, e depois vou tentar aproveitar esse código para gerar um arquivo txt, nessa mesma lógica.

    Fica o código , caso alguém quiser

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Adicionar colunas
            With DataGridView1
    
                .Columns.Add("CPF", "CPF")
                .Columns(0).Width = 150
                .Columns.Add("NomeResponsavel", "NomeResponsavel")
                .Columns(1).Width = 190
                .Columns.Add("NomeCrianca", "NomeCrianca")
                .Columns(2).Width = 190
    
    
    
            End With
            ' Adicionando linhas
            DataGridView1.Rows.Add(10)
    
            'Adicionando dados ao grid
            DataGridView1.Rows(0).Cells(0).Value = "02398979784"
            DataGridView1.Rows(1).Cells(0).Value = "02398979784"
            DataGridView1.Rows(2).Cells(0).Value = "02476853640"
            DataGridView1.Rows(3).Cells(0).Value = "02772956962"
            DataGridView1.Rows(4).Cells(0).Value = "03244072704"
            DataGridView1.Rows(5).Cells(0).Value = "03244072704"
            DataGridView1.Rows(6).Cells(0).Value = "03244072704"
            DataGridView1.Rows(7).Cells(0).Value = "03614306801"
            DataGridView1.Rows(8).Cells(0).Value = "04259946609"
            DataGridView1.Rows(9).Cells(0).Value = "04259946609"
            DataGridView1.Rows(10).Cells(0).Value = "05402838860"
    
    
    
            DataGridView1.Rows(0).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(1).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(2).Cells(1).Value = "Pedro Nunes"
            DataGridView1.Rows(3).Cells(1).Value = "Fernanda Macedo"
            DataGridView1.Rows(4).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(5).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(6).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(7).Cells(1).Value = "Enrico Fauze"
            DataGridView1.Rows(8).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(9).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(10).Cells(1).Value = "GUSTAVO ZANARDI "
    
    
            DataGridView1.Rows(0).Cells(2).Value = "Fernando Vilela"
            DataGridView1.Rows(1).Cells(2).Value = "Patricia Vilela"
            DataGridView1.Rows(2).Cells(2).Value = "Rafael Nunes"
            DataGridView1.Rows(3).Cells(2).Value = "Marcela Macedo"
            DataGridView1.Rows(4).Cells(2).Value = "Vitor Cavalieri Teixeira"
            DataGridView1.Rows(5).Cells(2).Value = "Franciana Cavalieri Teixeira"
            DataGridView1.Rows(6).Cells(2).Value = "Jair Cavalieri Teixeira"
            DataGridView1.Rows(7).Cells(2).Value = "Marcos Fauze"
            DataGridView1.Rows(8).Cells(2).Value = "Greta Chicarino"
            DataGridView1.Rows(9).Cells(2).Value = "Adam Chicarino "
            DataGridView1.Rows(10).Cells(2).Value = "Olavo Zanardi"
    
    
    
    
        End Sub
    
    
        Private Class Responsavel
            Friend CPF As String
            Friend Nome As String
            Friend Beneficiarios() As String
    
            Friend Shared Function Procurar(ByRef List As System.Collections.ObjectModel.Collection(Of Responsavel), ByRef CPF As String) As Responsavel
                For Each R As Responsavel In List
                    If R.CPF = CPF Then Return R
                Next R
                Return Nothing
            End Function
    
            Friend Sub Adicionar(ByRef Beneficiario As String)
                ReDim Preserve Me.Beneficiarios(0 To Me.Beneficiarios.Length)
                Me.Beneficiarios(Me.Beneficiarios.Length - 1) = Beneficiario
            End Sub
    
            Friend Sub New(ByRef CPF As String, ByRef Nome As String, ByRef Beneficiario As String)
                Me.CPF = CPF
                Me.Nome = Nome
                Me.Beneficiarios = New String() {Beneficiario}
            End Sub
        End Class
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim List As New System.Collections.ObjectModel.Collection(Of Responsavel)
            For Each Row As DataGridViewRow In DataGridView1.Rows
                Dim Procurado As Responsavel = Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
                If Procurado Is Nothing Then
                    List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value)))
                Else
                    Procurado.Adicionar(CStr(Row.Cells(2).Value))
                End If
            Next Row
            Dim Text As String = ""
            For Each R As Responsavel In List
                Text += "RESPONSAVEL: " + R.Nome + vbNewLine + "CPF: " + R.CPF + vbNewLine
                For Each B As String In R.Beneficiarios
                    Text += "BENEFICIARIO: " + B + vbNewLine
                Next B
            Next R
            TextBox1.Text = Text
    
        End Sub
    
    
    End Class
    

    Muito obrigada a todos

    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 00:44
    • Não Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 00:44
    • Marcado como Resposta AndreiaMeiga terça-feira, 28 de janeiro de 2014 20:14
    sábado, 25 de janeiro de 2014 19:45
  • Se eu tivesse mais uma coluna como poderia incluir na classe Responsavel, no caso eu teria mais uma coluna  dataNascimento 

    Seria a data de nascimento do beneficiario.

    segunda-feira, 27 de janeiro de 2014 19:47
  • Coloquei  

    Me.dtn = dtn

    No Friend sub new,

    Mas a data de nascimento fica como fosse um nome de beneficiario. Eu gostaria de colocar antes do nome do beneficiario.

    Tipo 

    Imports System.Windows.Forms
    Imports System.IO
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Adicionar colunas
            With DataGridView1
    
                .Columns.Add("CPF", "CPF")
                .Columns(0).Width = 150
                .Columns.Add("NomeResponsavel", "NomeResponsavel")
                .Columns(1).Width = 190
                .Columns.Add("NomeCrianca", "NomeCrianca")
                .Columns(2).Width = 190
                .Columns.Add("dtn", "dtn")
                .Columns(2).Width = 150
    
    
            End With
            ' Adicionando linhas
            DataGridView1.Rows.Add(10)
    
            'Adicionando dados ao grid
            DataGridView1.Rows(0).Cells(0).Value = "02398979784"
            DataGridView1.Rows(1).Cells(0).Value = "02398979784"
            DataGridView1.Rows(2).Cells(0).Value = "02476853640"
            DataGridView1.Rows(3).Cells(0).Value = "02772956962"
            DataGridView1.Rows(4).Cells(0).Value = "03244072704"
            DataGridView1.Rows(5).Cells(0).Value = "03244072704"
            DataGridView1.Rows(6).Cells(0).Value = "03244072704"
            DataGridView1.Rows(7).Cells(0).Value = "03614306801"
            DataGridView1.Rows(8).Cells(0).Value = "04259946609"
            DataGridView1.Rows(9).Cells(0).Value = "04259946609"
            DataGridView1.Rows(10).Cells(0).Value = "05402838860"
    
    
    
            DataGridView1.Rows(0).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(1).Cells(1).Value = "Marcos Vilela"
            DataGridView1.Rows(2).Cells(1).Value = "Pedro Nunes"
            DataGridView1.Rows(3).Cells(1).Value = "Fernanda Macedo"
            DataGridView1.Rows(4).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(5).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(6).Cells(1).Value = "RAFAEL LIMA CAVALIERI TEIXEIRA"
            DataGridView1.Rows(7).Cells(1).Value = "Enrico Fauze"
            DataGridView1.Rows(8).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(9).Cells(1).Value = "Monica Chicarino"
            DataGridView1.Rows(10).Cells(1).Value = "GUSTAVO ZANARDI "
    
    
            DataGridView1.Rows(0).Cells(2).Value = "Fernando Vilela"
            DataGridView1.Rows(1).Cells(2).Value = "Patricia Vilela"
            DataGridView1.Rows(2).Cells(2).Value = "Rafael Nunes"
            DataGridView1.Rows(3).Cells(2).Value = "Marcela Macedo"
            DataGridView1.Rows(4).Cells(2).Value = "Vitor Cavalieri Teixeira"
            DataGridView1.Rows(5).Cells(2).Value = "Franciana Cavalieri Teixeira"
            DataGridView1.Rows(6).Cells(2).Value = "Jair Cavalieri Teixeira"
            DataGridView1.Rows(7).Cells(2).Value = "Marcos Fauze"
            DataGridView1.Rows(8).Cells(2).Value = "Greta Chicarino"
            DataGridView1.Rows(9).Cells(2).Value = "Adam Chicarino "
            DataGridView1.Rows(10).Cells(2).Value = "Olavo Zanardi"
    
    
            DataGridView1.Rows(0).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(1).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(2).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(3).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(4).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(5).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(6).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(7).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(8).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(9).Cells(3).Value = "01/10/2011"
            DataGridView1.Rows(10).Cells(3).Value = "01/10/2011"
    
        End Sub
    
    
        Private Class Responsavel
            Friend CPF As String
            Friend Nome As String
            Friend dtn As String
            Friend Beneficiarios() As String
    
            Friend Shared Function Procurar(ByRef List As System.Collections.ObjectModel.Collection(Of Responsavel), ByRef CPF As String) As Responsavel
                For Each R As Responsavel In List
                    If R.CPF = CPF Then Return R
                Next R
                Return Nothing
            End Function
    
            Friend Sub Adicionar(ByRef Beneficiario As String)
                ReDim Preserve Me.Beneficiarios(0 To Me.Beneficiarios.Length)
                Me.Beneficiarios(Me.Beneficiarios.Length - 1) = Beneficiario
            End Sub
    
            Friend Sub New(ByRef CPF As String, ByRef Nome As String, ByRef dtn As String, ByRef Beneficiario As String)
                Me.CPF = CPF
                Me.Nome = Nome
                Me.dtn = dtn
                Me.Beneficiarios = New String() {Beneficiario}
            End Sub
        End Class
    
    
        'CPF, RESPONSAVEL,BENEFICIARIO
        Private Sub btnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMostrar.Click
            Dim List As New System.Collections.ObjectModel.Collection(Of Responsavel)
            For Each Row As DataGridViewRow In DataGridView1.Rows
                Dim Procurado As Responsavel = Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
                'Se a Lista Procurado for nulo
                If Procurado Is Nothing Then
                    'Adiciona CPF,RESPONSAVEL,BENEFICIARIO E DATA DE NASCIMENTO
                    List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value), CStr(Row.Cells(3).Value)))
                Else
                    'Senão adiciona beneficiario
                    Procurado.Adicionar(CStr(Row.Cells(2).Value))
                End If
            Next Row
            Dim Text As String = ""
            For Each R As Responsavel In List
                Text += "RESPONSAVEL: " + R.Nome + vbNewLine + "CPF: " + R.CPF + vbNewLine
                For Each B As String In R.Beneficiarios
                    Text += "BENEFICIARIO: " + B + vbNewLine
                Next B
            Next R
            TextBox1.Text = Text
    
        End Sub
    
       
    
    
      
        Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportar.Click
            Dim salvarComo As SaveFileDialog = New SaveFileDialog()
            Dim caminho As DialogResult
            Dim fluxoTexto As IO.StreamWriter
            Dim Arquivo As String
            Dim List As New System.Collections.ObjectModel.Collection(Of Responsavel)
    
    
            For Each Row As DataGridViewRow In DataGridView1.Rows
                Dim Procurado As Responsavel = Responsavel.Procurar(List, CStr(Row.Cells(0).Value))
                If Procurado Is Nothing Then
                    List.Add(New Responsavel(CStr(Row.Cells(0).Value), CStr(Row.Cells(1).Value), CStr(Row.Cells(2).Value), CStr(Row.Cells(3).Value)))
                Else
                    Procurado.Adicionar(CStr(Row.Cells(2).Value))
                End If
            Next Row
    
          
    
    
    
            salvarComo.CheckFileExists = False
            salvarComo.Filter = "Documentos de texto (*.txt)|*.txt"
            caminho = salvarComo.ShowDialog
            Arquivo = salvarComo.FileName
    
    
    
            fluxoTexto = New StreamWriter(Arquivo)
            Using writer As New StreamWriter(caminho)
                For Each R As Responsavel In List
                    fluxoTexto.WriteLine( _
                        "RESPONSAVEL: " + R.Nome + vbNewLine + "CPF: " + R.CPF
                        )
                    For Each B As String In R.Beneficiarios
                        fluxoTexto.WriteLine( _
                        "BENEFICIARIO: " + B
                       )
                    Next B
                Next R
    
    
            End Using
            fluxoTexto.Close()
        End Sub
    
    
    End Class
    

    segunda-feira, 27 de janeiro de 2014 20:47