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

Chamuanza

Condição num Ciclo While

Mensagens Recomendadas

Chamuanza

Um Bem Aja a todos

Não estou conseguindo resolver a seguinte questão:

Tenho este ciclo que apresenta o erro "Specified cast is not valid." quando (Leitor.Red) encontra uma celula da datagrid em branco.

Mas preciso que o ciclo continue até ao fim da Linha/Coluna passando pela celula em branco.Que condição devo aplicar no ciclo

 'Aqui sao lidos os dados
        While (LinhaAtual < LinhasPorPagina AndAlso Leitor.Read())
            'obtem os valores do datareader
            Id = Leitor.GetInt32(0)
            Nome = Leitor.GetString(1)
            Andar = Leitor.GetString(2)
            Ano = Leitor.GetString(17)
            Jan = Leitor.GetString(3)
            Fev = Leitor.GetString(4)
            Mar = Leitor.GetString(5)

            'inicia a impressao - Posição dos Dados
            PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
            e.Graphics.DrawString(Id.ToString(), FonteNormal, Brushes.Black, MargemEsquerda + 0, PosicaoDaLinha, New StringFormat())
            e.Graphics.DrawString(Nome.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat())
            e.Graphics.DrawString(Andar.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 200, PosicaoDaLinha, New StringFormat())
            e.Graphics.DrawString(Ano.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 300, PosicaoDaLinha, New StringFormat())
            e.Graphics.DrawString(Jan.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 350, PosicaoDaLinha, New StringFormat())
            e.Graphics.DrawString(Fev.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 425, PosicaoDaLinha, New StringFormat())
            e.Graphics.DrawString(Mar.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 500, PosicaoDaLinha, New StringFormat())

            LinhaAtual += 1
        End While

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Se o problema é que quando encontras uma célula em branco podes resolver isso de várias maneiras.

Por exemplo uma maneira rápida de resolver isso pode ser com o IIf e verificares para cada valor se é NULL (IsDBNull) e caso seja trocares por um outro valor por defeito, evitando assim essa excepção.

Outro modo pode ser simplesmente declares todas as variaveis como objectos, que assim já suportam NULLs, e recolheres os respectivos valores com Leitor(0) em vez do modo que fazes Leitor.GetType(0).

É só optares...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

:dontgetit:

Obrigado desde já pela atenção, mas como sou maçarico não consigo descrutinar como utilizar as tuas sugestões.

Se me puderes dar um exemplo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
spipo

Olá Chamuanza,

O que se refere r00tfixxxer é a isto:

FUNÇÃO:

IIF -> http://msdn.microsoft.com/en-us/library/27ydhh0d%28VS.71%29.aspx

Public Function IIf( _
   ByVal Expression As Boolean, _ 
   ByVal TruePart As Object, _ 
   ByVal FalsePart As Object _ 
) As Object

Exemplo:

IIf(IsDBNull(misdatos(0)), "", misdatos(0))

O outro modo que se refere, diria que é declares as tuas variaveis do tipo Object:

Exemplo:

Dim Id As Object
Dim Nome As Object
....
....

E depois a hora de mostrar os valores, verificas se estão a NULLS os objectos, mas claro tens que asignar valores tal e igual como ja tens feito.

O erro ocorre quando tentas fazer "Cast" a um valor que está a null, que nao tem referencia por isso sai-te o erro: "Specified cast is not valid." devido a uma das variaveis que estás asignar, entrar um valor NULO, se fazes um debug, verás em concreto o que ocurre. A hora que estás a fazer .toString a uma das variáveis...uma delas entrará Nothing...e Nothing.toString ...dá erro, porque estas a tentar converter Nada a string...


Saludos,Carlos Menezes

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.