Ir para conteúdo
Fórum Script Brasil
  • 0

Datagrid Não Fornece Ultimo Dado


Andersonjb

Pergunta

E ai, pessoal, olha só que estranho, eu estou atribuindo todos os valores de uma datagrid em uma variavel. Mas o engraçado, é que, se eu tenho 10 valores para serem armazenados, só armazenam os nove primeiros, e o ultimo não é armazenado. não importa quantos conteúdos de células que você tente guardar, o último não é guardado. Deem uma olhada no código:

	Dim nc As Integer = 0
        Dim texto As String
	Dim dtemtes as string

        dt = dgdtemte.DataSource

        For Each linha As DataRow In dt.Rows
            For Each coluna As DataColumn In dt.Columns
                nc = nc + 1
                If linha(coluna) <> "" Then
                    texto = linha(coluna)
                    If nc <= 16 Then
                        dtemtes = dtemtes & "0" & Hex(nc - 1) & "=" & texto & vbCrLf
                    Else
                        dtemtes = dtemtes & Hex(nc - 1) & "=" & texto & vbCrLf
                    End If
                End If
            Next
        Next
        MsgBox(dtemtes)

Porque isso acontece? Eu estou fazendo alguma coisa de errado ou é normal?

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0
Como é uma caixa Multiline? E outra, tenta gravar o valor da váriavel em um arquivo, ele não vai gravar a ultima String tambem!

Uma caixa de texto (TextBox) com a propriedade MultiLine como True.

E a respeito daquele "nc"? Ele não deveria ser zerado em alguma parte do loop?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Opa, olha o código ai, com o numero de colunas (nc) zerado e a exibição numa TextBox com a propriedade MultLine como True:

        Dim nc As Integer = 0
        Dim texto As String

        dt = dgdtemte.DataSource

        For Each linha As DataRow In dt.Rows
            For Each coluna As DataColumn In dt.Columns
                nc = nc + 1
                If linha(coluna) <> "" Then
                    texto = linha(coluna)
                    If nc <= 16 Then
                        dtemtes = dtemtes & "0" & Hex(nc - 1) & "=" & texto & vbCrLf
                    Else
                        dtemtes = dtemtes & Hex(nc - 1) & "=" & texto & vbCrLf
                        nc = 0
                    End If
                End If
            Next
        Next
        MsgBox(dtemtes)
        TextBox1.Text = dtemtes

E não deu certo...

Link para o comentário
Compartilhar em outros sites

  • 0

Voce tem certeza, Gray? Porque aqui isso não mudou em nada... blink.gif ... Mas olha só, eu digito tres letras, por exemplo A, B e C. "A" eu coloco na primeira linha na primeira coluna, "B" eu coloco na sugunda linha na segunda coluna, e "C" eu coloco na erceira linha na terceira coluna, e na hora de exibir ou salvar, só o "A" e o "B" são mostrados, o "C" desaparece!

Link para o comentário
Compartilhar em outros sites

  • 0

Voce tem certeza, Gray? Porque aqui isso não mudou em nada...  blink.gif  ...

Sim, eu fiz o teste aqui e realmente algumas colunas da última linha eram "comidas" pelo fato de haver aquele "<=" (uma vez que o incremento da variável está no início do loop).

Mas olha só, eu digito tres letras, por exemplo A, B e C. "A" eu coloco na primeira linha na primeira coluna, "B" eu coloco na sugunda linha na segunda coluna, e "C" eu coloco na erceira linha na terceira coluna, e na hora de exibir ou salvar, só o "A" e o "B" são mostrados, o "C" desaparece!

Você tem como isolar este problema em um projeto e enviar para eu dar uma olhada? Caso positivo, meu e-mail é wap@openlink.com.br.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Opa, tem sim, mas ele é um projeto meio "grande", Gray, mas to desenvolvendo ainda! Pode deixar que eu mando!

Por imaginar que ele seria grande foi que pedi para você *isolar* somente este problema e enviar para mim. Não precisar mandar o projeto todo, só um form com uma datagrid que seja preenchida e que apresente o determinado problema com o código que você postou.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Já fiz isso! Mas eu descobri e deixei la no programa pra vpce ver, quando eu extrai os dados dentro de um botão, "todos" vieram normalmente, mas quando eu extrai dentro de um Menu Principal, não veio o "ultímo" dado... É muito estranho, eu nunca vi isso! Pega o programa e ve ai, Gray, falows!

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, funcionou perfeitamente aqui! Mas, eu acho que sei qual é o seu erro. Quando você acaba de digitar na célula note que existe um "lápis" no canto esquerdo da tela. Aquele "lápis" significa que a grade está em modo de edição, portanto o que você acabou de escrever ainda não está realmente na célula. O conteúdo da célula só vai ser modificado se você escolher outra célula, teclar ENTER ou tirar o foco do controle. Ao pressionar o botão este último acontece (a perda do foco), mas ao escolher uma opção de menu não (o controle continua com o foco e portanto continua em modo de edição). É exatamente como no Excel, quando você começa a digitar em uma célula.

Sacou? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Saquei! Cacete, hein, Gray, se tem uma visão muito boa, eu não mesmo não teria enxergado isso! Mas fala ai, no caso, esse modo de edição não pode ser cancelado em código, né, o usuário tem que estar ciente do que esta fazendo, correto?

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, tem um jeito sim:

        Dim cm As CurrencyManager = DataGrid1.BindingContext(DataGrid1.DataSource)
        cm.EndCurrentEdit()
        cm.Refresh()

Coloque isso no código da opção do menu e você verá que o último dado vai aparecer.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
E deixa eu aproveitar pra perguntar, gray: tipo, eu posso inserir vários dados na DataGrid, certo? Mas e se eu quissese limitar apenas pra uma letra, como que eu poderia fazer?

Como assim "vários dados" e "apenas pra uma letra"? Não entendi...

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Ué, eu tenho uma célula em uma DataGrid, certo? Nela eu posso inserir varias letras, certo? Mas como eu faço para que ao inserir um dado em uma celula da DataGrid, não possa ser inserido mais de um caracter?

Link para o comentário
Compartilhar em outros sites

  • 0
Ué, eu tenho uma célula em uma DataGrid, certo? Nela eu posso inserir varias letras, certo? Mas como eu faço para que ao inserir um dado em uma celula da DataGrid, não possa ser inserido mais de um caracter?

Já experimentou criar um campo do tipo Char na DataTable? Eu não tentei, mas acho que seria uma possível tentativa. É de se imaginar que do mesmo jeito que ao criar um campo do tipo String você possa colocar uma String, criar um campo do tipo Char só vai permitir que você coloque um Char nele.

Experimente aí e depois dê um retorno se deu certo ou não.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...