Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

electric

[Resolvido] array numa row

Mensagens Recomendadas

electric

Boas ppl é o seguinte

Entre outros, tenho este problema,

tenho uma variavel que contem um array e queria colocar esses valores em rows diferentes num grid

parte o codio é

For i = 0 To .runnerPrices.Length - 1
				 With .runnerPrices(i)
					 Back = ""
					 For j = 0 To .bestPricesToBack.Length - 1
						 With .bestPricesToBack(j)
'TablaGrid.Rows(i)("OddBack") = .price

						 End With
					 Next

basicamente assim coloco o valor de .price numa row mas o proximo valor queria colocar na row seguinte da proxima coluna e nao estou a conseguir...

Ja agora, como onsigo por 2 valores numa cell ?

tipo

a= .a &"|"& .b

isto coloca na cell o valor dividido po | mas queria ter tipo um em cima e outro na mesma cel mas em baixo é possivel ??

cumps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

bem apos 20 visualisações sem resposta provavelmente nao me soube explicar lool

como tal vou expor isto de outra forma xD

se eu tiver uma variavel que tem 9 valores e eu quero colocalos numa tabela 3*3 ou seja

0a | 0b | 0C

1a | 1b | 1c

2a | 2b | 2c

Como o faria ?

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jlpcalado

Olá.

Se a ideia é colocares numa grid uma boa aproximaçãoi será usares uma datatable e fazeres o bind a uma datagridview.

O código que envio exemplifica essa abordagem.

Dim i As Integer
 Dim dt As New DataTable
 Dim dr As DataRow
 dt.Columns.Add("Mês")
 For i = 1 To 31
	 dt.Columns.Add(i.ToString)
 Next
 Dim Month As Integer
 Dim Days As Integer
 For Month = 0 To 11
	 dr = dt.NewRow
	 Days = DateTime.DaysInMonth(Year(Now), Month + 1)
	 dr(0) = Month + 1
	 For i = 1 To Days
		 dr(i) = i
	 Next i
	 dt.Rows.Add(dr)
 Next Month
 dg.DataSource = dt

Outra abordagem é criar um array bidimensional.

O problema é que eles não são direta/ 'bindables' à datagrid.

Será necessário criar as colunas da datagrid por código e adicionar o array linha a linha à datagrid.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Desde ja obrigado pela resposta void :)

Eu ja tenho uma datatable criada, o meu grande problema é que os valores no array nao estao a ser colocados correctamente la porque como disse em cima eu tenho um conjunto de 3 colunas para 3 linhas para fazer entao a tabela de 3*3 na mesma variavel, o que nao consigo é polos nesse formato, vou colocar a parte toda do codigo onde ta a duvida:

Cria a tabela:

Dim rowgrid As DataRow
    ' Dim rowgridback As DataRow
    With TablaGrid.Columns 'Set up all columns
        .Add("OddBack")
        .Add("OddLay")
    End With

devia escrever nela!

With mpriceresp
        If .errorCode = BFUK.GetMarketPricesErrorEnum.OK Then
            With .marketPrices
                For i = 0 To .runnerPrices.Length - 1
                    With .runnerPrices(i)
                        Back = ""
                        For j = 0 To .bestPricesToBack.Length - 1
                            With .bestPricesToBack(j)
                                TablaGrid.Rows(i)("OddBack") = .price
                            End With
                        Next

e depois surge o mesmo para outra variavel...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Boas, ja consegui resolver essa parte xD ficou desta maneira para quem posa vir a precisar:

With mpriceresp
	 If .errorCode = BFUK.GetMarketPricesErrorEnum.OK Then
		 With .marketPrices
			 For i = 0 To .runnerPrices.Length - 1
				 With .runnerPrices(i)
					 For j = 0 To .bestPricesToBack.Length - 1
						 TablaGrid.Rows(i)("OddBack") = .bestPricesToBack(2).price
						 TablaGrid.Rows(i)("OddBack1") = .bestPricesToBack(1).price
						 TablaGrid.Rows(i)("OddBack2") = .bestPricesToBack(0).price
Next
					 For j = 0 To .bestPricesToLay.Length - 1
						 TablaGrid.Rows(i)("OddLay") = .bestPricesToLay(2).price
						 TablaGrid.Rows(i)("OddLay1") = .bestPricesToLay(1).price
						 TablaGrid.Rows(i)("OddLay2") = .bestPricesToLay(0).price
Next
				 End With
			 Next
		 End With
	 End If
 End With

no entanto continu aqui com uma duvida... agora que tenho isto tudo arranjadinho, como consigo por 2 valores na mesma celula mas um por baixo do outro exemplo:

Ola mundo

ABC

é possivel ?

acabou

Editado por electric

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Eu aqui todo contente e afinal continue mal...

esta solução que arranjei realmente funciona mas so mesmo para esta selecção que estou a fazer... esquecime de que, cada selecção que eu fizer vai ser diferentes da anterior e como tal isto teria de ser tudo automatico :\ vou partir mais um pouco a cabeça... aradeço ajudas claro :D

Abraços

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Bem o erro que me da é

Index was outside the bounds of the array.

Pelo que andei a ver quer dizer que nao tenho linhas nenhumas e como tal nao as consegue escrever certo ?

Agora secalhar o melhor para resolver seria sei la dividir esta operação em 2 blocos ?

exemplo

bloco 1 vai sacar os valores

bloco 2 vai colocar os valores na grid

Sera que isto resolveria ?

Imfelizmente tenho de ir trabalhar nao consigo tar aqui mais tempo a testar :(

Abraços

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jlpcalado

Olá.

Torna-se difícil de perceber o que estás e o que pretendes fazer desconhecendo a estrutura do objecto 'mpriceresp'.

Inicial/ estás a criar 2 colunas na grid, mas no procedimento iniciado com 'With mpriceresp' repara que estás tentar introduzir valores em 6 colunas (!!...)

Deves 'sacar' os valores para as 3 colunas de cada linha e, então, adicionar a linha

...Não é possível por 2 valores na mesma célula óbvia/. Há produtos '3dParties' que disponibilizam rowstyles de fracções para a datagridview ...pagando.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Olá.

Torna-se difícil de perceber o que estás e o que pretendes fazer desconhecendo a estrutura do objecto 'mpriceresp'.

Inicial/ estás a criar 2 colunas na grid, mas no procedimento iniciado com 'With mpriceresp' repara que estás tentar introduzir valores em 6 colunas (!!...)

Deves 'sacar' os valores para as 3 colunas de cada linha e, então, adicionar a linha

...Não é possível por 2 valores na mesma célula óbvia/. Há produtos '3dParties' que disponibilizam rowstyles de fracções para a datagridview ...pagando.

Boas,

Sim no fundo sao 6 colunas

- correspondente ao balor a back que tem 3 colunas por 3 celulas e 3 linhas

- correspondente ao valor lay que tem 3 colunas pro 3 celulas e 3 linhas

mas isso neste caso pois podera surgir terem tipo 3 colunas 3 cellulas e umas quantas linhas

o que me estas a sugerir se bem percebi é

criar de antemao as 6 colunas ( ja esta feito logo no inicio e dei um nome a cada coluna obviamente )

e agora "sacar" os valores todos atribuilos a 6 variaveis diferentes e so depois colocalas la ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric


With TablaGrid.Columns    'Set up all columns
           .Add("SelectionId")
           .Add("Name")
           .Add("OddBack")
           .Add("OddBack1")
           .Add("OddBack2")
           .Add("OddLay2")
           .Add("OddLay1")
           .Add("OddLay")
       End With

mpriceresp = Me.BetFairUK.getMarketPrices(mpricesreq)
    With mpriceresp
	    If .errorCode = BFUK.GetMarketPricesErrorEnum.OK Then
		    With .marketPrices
			    For i = 0 To .runnerPrices.Length - 1
				    With .runnerPrices(i)
					    back = ""
					    For j = 0 To .bestPricesToBack.Length - 1
						    With .bestPricesToBack(j)
							    MsgBox(back & .price)
							    'TablaGrid.Rows(i)("") = back & .price
							    'TablaGrid.Rows(i)("OddBack") = .bestPricesToBack(2).price
							    'TablaGrid.Rows(i)("OddBack1") = .bestPricesToBack(1).price
							    'TablaGrid.Rows(i)("OddBack2") = .bestPricesToBack(0).price
						    End With
					    Next
				    End With
				    With .runnerPrices(i)
					    For j = 0 To .bestPricesToLay.Length - 1
						    '    If .bestPricesToLay.Length > 0 Then
						    'TablaGrid.Rows(i)("OddLay") = .bestPricesToLay(2).price
						    'TablaGrid.Rows(i)("OddLay1") = .bestPricesToLay(1).price
						    'TablaGrid.Rows(i)("OddLay2") = .bestPricesToLay(0).price
						    'End If
					    Next
				    End With
			    Next
		    End With
	    End If
    End With
    DgGrid.DataSource = TablaGrid  'Show the data
    DgGrid.Refresh()

Lembreime de testar e deu resultado...

ou seja coloque a msgbox mostrar o valor back & .price e ele realmente mostra os valores todos certos e na seguinte ordem:

|3|2|1|

|6|5|4|

|9|8|7|

Agora pergunto eu :\ ha maneira de meter isso direcatmente la ? ou seja em vez de mostrar pela msgbox ecrever directamente na grid?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jlpcalado

Cria uma datarow derivada da tablagrid

associa os valores à datarow

adiciona a datarow à tablagrid

With TablaGrid.Columns 'Set up all columns
	 .Add("SelectionId")
	 .Add("Name")
	 .Add("OddBack")
	 .Add("OddBack1")
	 .Add("OddBack2")
	 .Add("OddLay2")
	 .Add("OddLay1")
	 .Add("OddLay")
 End With
 Dim dr As DataRow
 mpriceresp = Me.BetFairUK.getMarketPrices(mpricesreq)
 With mpriceresp
	 If .errorCode = BFUK.GetMarketPricesErrorEnum.OK Then
		 With .marketPrices
			 For i = 0 To .runnerPrices.Length - 1
				 dr = TablaGrid.NewRow
				 dr(0) = "valor selectionId"
				 dr(1) = "valor Name"
				 With .runnerPrices(i)
					 back = ""
					 For j = 0 To .bestPricesToBack.Length - 1
						 With .bestPricesToBack(j)
							 dr(j + 2) = back & .price
						 End With
					 Next
				 End With
				 With .runnerPrices(i)
					 For j = 0 To .bestPricesToLay.Length - 1
						 dr(j + 5) = back & .price

					 Next
				 End With
				 TablaGrid.Rows.Add(dr)
			 Next
		 End With
	 End If
 End With
 DgGrid.DataSource = TablaGrid 'Show the data
 DgGrid.Refresh()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Muito obrigado jlpcalado,

um dia vou conseguir fazer estas cenas sozinho xD mas ate la ´mt leitura e ajuda :)

tinha ficado em duvida do porke dos

dr(j + 5) = back & .price

j+5 mas ja fikei a saber o que fazem, no entanto tenho outro problema!

é que o selectionid e o name não sao valores que eu coloque a mao! sao valores qye veem de outraas variaveis que tambem sao descarregadas da API, e como tal alterei aqui um pouco a tua receita e ja deu mas, agora criame um quadro com o selectionid e o nome e na linha de baixo é que me da os valores ou seja nao estam na mesma linha...

o segundo problema é que nop primeiro

With .runnerPrices(i)
											 back = ""
											 For j = 0 To .bestPricesToBack.Length - 1
													 With .bestPricesToBack(j)
															 dr(j + 2) = back & .price
													 End With
											 Next
									 End With

esta tudo ok mas os valores estao trocados ou seja esta

|1|2|3| e eu preciso deles em |3|2|1|

ando desde ontem a volta lol ja avancei bastante co ma ajuda de todos mas ainda nao fui a cama lool e agora tenho de ir trabalhar xD logo a noite volto ao ataque

Abraços

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jlpcalado

A instrução TablaGrid.Rows.Add(dr) adiciona uma linha à tabela - tens que controlar a posição no programa em que é efetuada - claro que deve ser após ter todas as colunas da dr preenchidas.

Em caso de (!!) dúvida coloca os dr(0) e dr(1) imediata/ antes da instrução:

dr(0) = "valor selectionId"

dr(1) = "valor Name"

TablaGrid.Rows.Add(dr)

òbvia/ que nessa altura o programa já deve saber os "valor selectionId" e "valor Name"

Deves controlar, também, a sequência en que introduzes os valores...

na situação que referes basta trocar a definição do ciclo : For j = .bestPricesToBack.Length - 1 to 0 Step -1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Bom dia, estive a tentar fazer o que me disseste e até andei a trocar numeros ( a melhor maneira de eu conseguir perceber .. estupido mas é aminha maneira xD ) e nao resolveu eu agora depois de alterar tudo conforme os teus parametros ficou assim:

Sub criatabela()
	TablaGrid.Rows.Clear()
	TablaGrid.Columns.Clear()
	Dim oMarketReq As New BFUK.GetMarketReq	  'Create the request object
	Dim oMarketResp As BFUK.GetMarketResp	'Create a varaible for the response object
	'Dim rowgrid As DataRow
	With TablaGrid.Columns	'Set up all columns
		.Add("SelectionId")
		.Add("Name")
		.Add("OddBack")
		.Add("OddBack1")
		.Add("OddBack2")
		.Add("OddLay2")
		.Add("OddLay1")
		.Add("OddLay")
	End With
	With (oMarketReq)
		.header = FrmLogin.oHeaderUK()
		.marketId = FrmMercado.iddomercado
	End With
	oMarketResp = Me.BetFairUK.getMarket(oMarketReq)	'Call the API (getMarket)
	With oMarketResp					  'Process the response
		FrmLogin.CheckHeader(.header)
		If .errorCode = BFUK.GetMarketErrorEnum.OK Then
			With .market
				For i = 0 To .runners.Length - 1
					dr = TablaGrid.NewRow
					With .runners(i)
						dr(0) = .selectionId
						dr(1) = .name
					End With
					TablaGrid.Rows.Add(dr)
				Next
			End With
		End If
	End With
	Dim mpricesreq As New BFUK.GetMarketPricesReq
	Dim mpriceresp As New BFUK.GetMarketPricesResp
	With (mpricesreq)
		.header = FrmLogin.oHeaderUK
		.marketId = FrmMercado.iddomercado
	End With
	mpriceresp = Me.BetFairUK.getMarketPrices(mpricesreq)
	With mpriceresp
		If .errorCode = BFUK.GetMarketPricesErrorEnum.OK Then
			With .marketPrices
				For i = 0 To .runnerPrices.Length - 1
					dr = TablaGrid.NewRow
					With .runnerPrices(i)
						back = ""
						For j = .bestPricesToBack.Length - 1 To 0 Step -1
							With .bestPricesToBack(j)
								dr(j + 2) = back & .price
							End With
						Next
					End With
					With .runnerPrices(i)
						lay = ""
						For j = 0 To .bestPricesToLay.Length - 1
							With .bestPricesToLay(j)
								dr(j + 5) = lay & .price
							End With
						Next
					End With
					TablaGrid.Rows.Add(dr)
				Next
			End With
		End If
	End With
	DgGrid.DataSource = TablaGrid  'Show the data
	DgGrid.Refresh()
End Sub

no entanto contiu como tinha antes .... ou seja

|id|name|

|id|name|

|id|name|

|1|2|3|1|2|3

...

isto porque no lay o primeiro é mesmo o num 1 no caso do back como tenho a coluna a fazer este sentido -><- tem de estar ao contrario :\

mais uma vez muito agradecido

vou partir mais um pouco a cabeça... :)

Editado por electric

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jlpcalado

Atenção!

Numa 1ª fase estás a adicionar 'alhos' - oMarketResp.market.runners(i)

Numa 2ª 'bugalhos' - mpriceresp.marketPrices.runnerPrices(i)

Tens que determinar como é que os 'bugallhos' se relacionam com os 'alhos'.

Como não conheço o modelo da API, numa primeira aproximação é expectável que a 2ª variável (bugalhos) tenha uma propriedade que permita a relação com a propridade 'selectionId' da 1ª (alhos).

Neste caso o ciclo iniciado com With mpriceresp deve correr dentro do ciclo With .runners(i)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
electric

Bem que dor de cabeça que isto me teem dado ... axo que ja tentei de tudo e nada, coloquei o with mpricesresp dentro do with .runners(i) nada continua a dar acho que um pouco pior porque alem de me colocar:

nome1

prices 1

prices 2

prices 3

nome 2

prices 1

...

Ainda continua a ter a sequencia dos prices errada ou seja em vez de 3 2 1 continua com o 1 2 3

so me apetece desistir mas o meu feito nao me deixa...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.