ROWHEADER NAO MOSTRA VALOR ATRIBUIDO

BRO840 27/01/2013 14:20:32
#418164
Boas minha gente

Tenho uma aplicação que no Evento New() tem o seguinte codigo:

dsFutebol.Tables.Add([Ô]JOGOS[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]ID[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]EPOCA[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]COMPETICAO[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]DATA[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]FASE[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]DETALHE[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]JORNADA[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]VISITADO[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]VISITANTE[Ô])
dsFutebol.Tables([Ô]JOGOS[Ô]).Columns.Add([Ô]RESULTADO[Ô])

dgJOGOS.DataSource = dsFutebol.Tables([Ô]JOGOS[Ô])

Depois num segundo evento tenho:
....
...... código que preenche a tabela Jogos do Dataset Futebol com vários registros
....
....

Até aqui tudo bem. O problema vem a seguir. Ainda neste segundo evento tenho o seguinte código:

Dim I As Integer
For I = 0 To dsFutebol.Tables([Ô]JOGOS[Ô]).Rows.Count - 1
dgJOGOS.Rows(I).HeaderCell.Value = dsFutebol.Tables([Ô]JOGOS[Ô]).Rows(I).Item(0).ToString
Next

Então, o problema é que os dados não ficam visíveis à primeira. Mas se correr uma segunda e terceira vez este segundo evento, ai os dados ficam visíveis.

Mas eu preciso que os dados fiquem visíveis logo à primeira!

Basicamente este código é para colocar o ID da tabela Jogos no RowHeader. Mas à primeira e não só depois de executar o evento a segunda vez.

Obrigado pela ajuda
JABA 30/01/2013 20:28:37
#418450
Tente passar o depurador e ver quais são os eventos que estão sendo executados em sua aplicação, além disso, veja se a ordem dos eventos está influenciando a mudança dos dados

vlw
BRO840 30/01/2013 20:50:00
#418451
Obrigado pelo comentário!

Onde está

Dim I As Integer
For I = 0 To dsFutebol.Tables([Ô]JOGOS[Ô]).Rows.Count - 1
dgJOGOS.Rows(I).HeaderCell.Value = dsFutebol.Tables([Ô]JOGOS[Ô]).Rows(I).Item(0).ToString
Next

São as ultimas linha de código do evento e não estão a disparar nenhum outro evento. Se eu fizer break no [Ô]Next[Ô] e analisar qual o valor do .HeaderCell.Value ele é realmente igual ao valor de dsFutebol.Tables([Ô]JOGOS[Ô]).Rows(I).Item(0).ToString.

Ou seja o valor está a ser atribuido, no entanto por algum motivo não está a ser mostrado a quando da primeira execução.

Já dei voltas ao código que até é bem pequeno e não vejo nenhuma inconsistência.

Por isso vim aqui ver se alguém me podia ajudar porque realmente não consigo dar volta nisto.

Mais uma vez obrigado!
OCELOT 31/01/2013 01:27:46
#418465
Isso está em um Form? Se sim já tentou colocar no evento Load do form isso?

O New é o construtor, ele é a primeira coisa que executa quando a classe é instanciada, e pode ser que seja muito cedo para você modificar certas coisas nos componentes do form ai, já o eveto Load acontece depois dos componentes terem sido iniciados.
BRO840 31/01/2013 07:07:36
#418467
OCELOTE excelente dica!

Agora já mostra na primeira vez que o evento é chamado.

Ainda assim vou ter de analisar o porquê, dado que não era no evento New() que o código que atribuía o valor do dataset ao valor do datagrid.

No evento New() apenas estava a criar o dataset, a tabela jogos e as colunas dessa mesma tabela. Além disso as outras colunas estavam a mostrar tudo normal só os HeaderRows é que não mostravam o valor associado.

Bom mas para já está a funcionar na perfeição, então muito obrigado!
OCELOT 31/01/2013 08:43:53
#418474
Como estava no New provavelmente você modificava o valor dos headers antes do controle ter iniciado completamente, então na hora que ele terminava de iniciar o valor padrão substituía o que você colocou por código, já os dados das outras linhas como não tinham um valor padrão para ele iniciar ficavam o que você colocou por código mesmo.
Faça seu login para responder