Chamuanza Posted June 17, 2012 at 10:00 PM Report Share #463540 Posted June 17, 2012 at 10:00 PM (edited) Um Bem Aja a Todos Tenho este codigo que me coloca os dados numa Listbox, mas eu pretendia colocar os dados numa Datagrid e não sei como. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Clear() matrizNum = Split(txtnumeros.Text, ",") Call geraComb(UBound(matrizNum) + 1, CInt(txtelementos.Text), 1, 1, "") MsgBox("Nº de Apostas- " & ListBox1.Items.Count) ''Colocar dados da Listbox na datagrid 'For Linhas = 0 To ListBox1.Items.Count ' For Colunas = 0 To 4 ' Me.DataGridView1.Item(Colunas, Linhas).Value = ListBox1.SelectedItems ' Next Colunas ' Next Linhas End Sub Sub geraComb(ByVal totalNum As Integer, ByVal totalElementos As Integer, ByVal ElementoAtual As Integer, ByVal num As Integer, ByVal sequencia As String) Dim seqTemp As String Dim limiteElem As Integer limiteElem = totalNum - (totalElementos - ElementoAtual) For i = num To limiteElem seqTemp = sequencia & (matrizNum(i - 1)) If ElementoAtual < totalElementos Then Call geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & " ") Else ListBox1.Items.Add(seqTemp & " " & txtelementos.Text) End If Next i End Sub Edited June 17, 2012 at 10:01 PM by Chamuanza Link to comment Share on other sites More sharing options...
jlpcalado Posted June 18, 2012 at 12:10 PM Report Share #463634 Posted June 18, 2012 at 12:10 PM (edited) Public Class Form1 Dim matrizNum Dim arrStr As ItemStr() 'array de strings Dim Contador As Integer 'indice do array Sub geraComb(ByVal totalNum As Integer, ByVal totalElementos As Integer, ByVal ElementoAtual As Integer, ByVal num As Integer, ByVal sequencia As String) Dim seqTemp As String : Dim limiteElem As Integer limiteElem = totalNum - (totalElementos - ElementoAtual) For i = num To limiteElem seqTemp = sequencia & (matrizNum(i - 1)) If ElementoAtual < totalElementos Then Call geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & " ") Else ListBox1.Items.Add(seqTemp & " " & txtelementos.Text) Contador += 1 'incremento indice do array ReDim Preserve arrStr(Contador) arrStr(Contador) = New ItemStr(seqTemp.ToString) 'instancia uma nova sequência e adiciona-a ao array End If Next i End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Clear() matrizNum = Split(txtnumeros.Text, ",") Contador = -1 'inicia a -1 para incrementar depois na GeraComb e obter o valor 0 para o 1º indice do arrStr Call geraComb(UBound(matrizNum) + 1, CInt(txtelementos.Text), 1, 1, "") MsgBox("Nº de Apostas- " & ListBox1.Items.Count) DataGridView1.DataSource = arrStr ' coloca os dados do array na datagridview ''Colocar dados da Listbox na datagrid 'For Linhas = 0 To ListBox1.Items.Count ' For Colunas = 0 To 4 ' Me.DataGridView1.Item(Colunas, Linhas).Value = ListBox1.SelectedItems ' Next Colunas ' Next Linhas End Sub 'Classe necessária para que o array apareça na datagrid porque a datasource precisa de pelo menos uma propriedade Public Class ItemStr Private _mitem As String Public Sub New(ByVal mitem As String) _mitem = mitem End Sub Public Property Sequencia() As String Get Return _mitem End Get Set(ByVal value As String) _str = value End Set End Property End Class End Class Edited June 19, 2012 at 09:37 PM by Caça GeSHi Link to comment Share on other sites More sharing options...
Chamuanza Posted June 18, 2012 at 08:54 PM Author Report Share #463832 Posted June 18, 2012 at 08:54 PM (edited) Oi jlpcalado Desde já obrigado pela atenção Não conseguiria chegar a esta solução, no entanto o resultado não é ainda assim o esperado.na totalidade, pois tive que alterar a ultima parte do código, e não sei se a alteração estará correta Public Property Sequencia() As String Get Return _mitem End Get Set(ByVal value As String) 'no teu codigo tens _str=value eu troquei pois dá erro "O nome não está declarado" _mitem = value End Set End Property assim carrega a DatagridView com as colunas (6) em vazio e a sétima com a sequencia.Vou tentar corrigir mas não sei se consigo Coloco a seguir o codigo completo Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Clear() matrizNum = Split(txtnumeros.Text, ",") Contador = -1 'Inicia a -1 para incrementar depois na Geracomb e obter o valo 0 para o 1º indice do arrStr Call geraComb(UBound(matrizNum) + 1, CInt(txtelementos.Text), 1, 1, "") MsgBox("Nº de Apostas- " & ListBox1.Items.Count) DataGridView1.DataSource = arrStr 'Coloca os dados do array na Datagrid End Sub Sub geraComb(ByVal totalNum As Integer, ByVal totalElementos As Integer, ByVal ElementoAtual As Integer, ByVal num As Integer, ByVal sequencia As String) Dim seqTemp As String Dim limiteElem As Integer limiteElem = totalNum - (totalElementos - ElementoAtual) For i = num To limiteElem seqTemp = sequencia & (matrizNum(i - 1)) If ElementoAtual < totalElementos Then Call geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & " ") Else ListBox1.Items.Add(seqTemp & " " & txtelementos.Text) Contador += 1 'incremento indice do array ReDim Preserve arrStr(Contador) arrStr(Contador) = New Itemstr(seqTemp.ToString) End If Next i End Sub End Class Public Class ItemStr Private _mitem As String Public Sub New(ByVal mitem As String) _mitem = mitem End Sub Public Property Sequencia() As String Get Return _mitem End Get Set(ByVal value As String) _mitem = value End Set End Property Edited June 18, 2012 at 09:09 PM by Chamuanza Link to comment Share on other sites More sharing options...
jlpcalado Posted June 18, 2012 at 10:07 PM Report Share #463867 Posted June 18, 2012 at 10:07 PM Olá Chamu. Claro que devia ser _mitem... Podes dizer-me mais especifica/ o que pretendes fazer? O que carregas na listbox são as combinações de n números (presentes na string e separados por ',') m a m (m=txtelementos.Text) seguido do valor m. Como falas em 6 colunas ... - será que m=6? Diz q. coisa, talvez possa ajudar-te Link to comment Share on other sites More sharing options...
Chamuanza Posted June 18, 2012 at 10:43 PM Author Report Share #463877 Posted June 18, 2012 at 10:43 PM sim, o que pretendo é passar as combinações geradas, uma a uma para a datagrid, e posteriormente guardar numa tabela Link to comment Share on other sites More sharing options...
jlpcalado Posted June 19, 2012 at 08:53 AM Report Share #463926 Posted June 19, 2012 at 08:53 AM (edited) Experimenta este código. A diferença é que 'totalelementos' é fixo = 6 Public Class Form1 Dim matrizNum Dim matrizSeq Dim table As DataTable Dim contador As Integer = 0 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load table = New DataTable table.Columns.Add("Id", GetType(Integer)) table.Columns.Add("n1", GetType(Integer)) table.Columns.Add("n2", GetType(Integer)) table.Columns.Add("n3", GetType(Integer)) table.Columns.Add("n4", GetType(Integer)) table.Columns.Add("n5", GetType(Integer)) table.Columns.Add("n6", GetType(Integer)) End Sub Sub geraComb(ByVal totalNum As Integer, ByVal totalElementos As Integer, ByVal ElementoAtual As Integer, ByVal num As Integer, ByVal sequencia As String) Dim seqTemp As String : Dim limiteElem As Integer limiteElem = totalNum - (totalElementos - ElementoAtual) Dim col As New DataColumn("n1") For i = num To limiteElem seqTemp = sequencia & (matrizNum(i - 1)) If ElementoAtual < totalElementos Then Call geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & " ") Else ListBox1.Items.Add(seqTemp & " " & txtelementos.Text) matrizSeq = Split(seqTemp, " ") contador += 1 table.Rows.Add(contador, matrizSeq(0), matrizSeq(1), matrizSeq(2), matrizSeq(3), matrizSeq(4), matrizSeq(5)) End If Next i End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Clear() matrizNum = Split(txtnumeros.Text, ",") 'Call geraComb(UBound(matrizNum) + 1, CInt(txtelementos.Text), 1, 1, "") Call geraComb(UBound(matrizNum) + 1, 6, 1, 1, "") ' combinações 6 a 6 MsgBox("Nº de Apostas- " & ListBox1.Items.Count) DataGridView1.DataSource = table End Sub End Class Edited June 19, 2012 at 09:37 PM by Caça GeSHi Link to comment Share on other sites More sharing options...
Chamuanza Posted June 19, 2012 at 06:23 PM Author Report Share #464187 Posted June 19, 2012 at 06:23 PM Oi jlpCalado Um muito obrigado pela ajuda - Era de facto isto que pretendia Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now