Jump to content

[Resolvido] Passar Dados de Listbox para Datagrid


Chamuanza
 Share

Recommended Posts

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 by Chamuanza
Link to comment
Share on other sites

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 by Caça
GeSHi
Link to comment
Share on other sites

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 by Chamuanza
Link to comment
Share on other sites

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

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 by Caça
GeSHi
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.