Usuário com melhor resposta
Como separar nomes DataGridView

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
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
-
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
-
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
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
-
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 VilelaBENEFICIARIO: 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)
-
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
-
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
-
-
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