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

Data Grid - Adicionando Colunas


Andersonjb

Pergunta

E ai Pessoal, olhem so esse programa:

        Dim dt As New DataTable
        For i As Integer = 0 To 15
            dt.Columns.Add(Hex(i))
            dt.Rows.Add(Hex(i))
        Next
        dgtabela.DataSource = dt

Bem, ele adiciona tabelas e linhas com strings fixas nelas. Eu consigo adicionar os caracteres nas Colunas mas não nas linhas, porque? O que eu estou fazendo de errado?

Link para o comentário
Compartilhar em outros sites

  • Respostas 57
  • Created
  • Última resposta

Top Posters For This Question

Posts Recomendados

  • 0
Não, eu só quero que ao clicar na opção do menu, eu escreva por exemplo o alfabeto na Data Grid, entendeu, a partir da celula que esta selecionada. Entendeu meu codigo agora?

Agora entendi, mas isso não tem nada haver com o que falávamos antes (sobre limitar a edição na DataGrid). Mas, pode acontecer das células já estarem preenchidas e você vai querer que elas sejam substituídas com o alfabeto?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Sim, pode acontecer smile.gif

Então você teria também que "editar" os registros e não apenas inserí-los, como você está fazendo. O que você tem que ter em mente é que o "dt" é um DataTable, ou seja, é uma tabela onde os registros são armazenados em linhas e colunas fixas. Supondo que hajam 10 colunas para cada linha, se o usuário posicionar a seleção na 5ª coluna de uma linha qualquer e mandar preencher o alfabeto dali em diante, você mandará preencher as colunas 5, 6, 7, 8, 9 e 10 e depois pular para a próxima linha. Na próxima linha, obviamente, ele vai preencher todos as colunas. E assim por diante até que o alfabeto acabe.

Sacou? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Saquei, mas como eu faço para indicar um ponto exato na Data Table, para que ele comece a adicionar a partir dali ??

Cada linha (registro) da DataTable é representado por um índice que começa de 0. Ou seja, o primeiro registro é 0, o segundo é 1, o terceiro é 2, e assim por diante. O mesmo ocorre com as linhas dos dados exibidos na DataGrid. E o mesmo se dá com as colunas. Por exemplo...

        Dim dt As DataTable = dgHexa.DataSource
        Dim linha As Integer = dgHexa.CurrentCell.RowNumber
        Dim coluna As Integer = dgHexa.CurrentCell.ColumnNumber
        dt.Rows(linha)(coluna) = "teste"

... vai definir a coluna "coluna" na linha "linha" da DataTable como "teste". E isso vai ser refletido na DataGrid. Sacou agora? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, Gray, agora eu estou em outra parte do programa e estou adicionando de maneira diferente... Bem, olha so:

        Dim dt As New DataTable
        Dim leia As IO.StreamReader
        Dim texto As String
        Dim consulta As String
        Dim linha As Integer
        Dim coluna As Integer

        leia = IO.File.OpenText(nomearq)

        Dim palavra As String
        Dim palavras As String = leia.ReadToEnd

        For Each palavra In palavras
            consulta = Asc(palavra)

            If consulta = 13 Then
                linha = 0
                coluna = 0
                dt.Rows(linha)(coluna) = texto
            Else
                texto = texto & palavra
            End If
            MsgBox(texto)
        Next
        dgtabela.DataSource = dt
        leia.Close()

O que está errado nessa atribuição na DataTable?

Link para o comentário
Compartilhar em outros sites

  • 0
Bem, Gray, agora eu estou em outra parte do programa e estou adicionando de maneira diferente... Bem, olha so:

        Dim dt As New DataTable
        Dim leia As IO.StreamReader
        Dim texto As String
        Dim consulta As String
        Dim linha As Integer
        Dim coluna As Integer

        leia = IO.File.OpenText(nomearq)

        Dim palavra As String
        Dim palavras As String = leia.ReadToEnd

        For Each palavra In palavras
            consulta = Asc(palavra)

            If consulta = 13 Then
                linha = 0
                coluna = 0
                dt.Rows(linha)(coluna) = texto
            Else
                texto = texto & palavra
            End If
            MsgBox(texto)
        Next
        dgtabela.DataSource = dt
        leia.Close()

O que está errado nessa atribuição na DataTable?

Onde você incrementa linha e coluna? Do jeito que está eles sempre serão 0.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Voce fala dessa maneira?

            If consulta = 13 Then
                dt.Rows.Add()
                dt.Rows(linha)(coluna) = texto
huh.gif ???
Não... desta maneira:
            If consulta = 13 Then
                dt.Rows.Add(new Object() {texto})

Ok? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Nem fazendo dessa maneira deu certo:

        Dim dt As New DataTable
        Dim leia As IO.StreamReader
        Dim texto As String
        Dim consulta As String
        Dim linha As Integer
        Dim coluna As Integer

        leia = IO.File.OpenText(nomearq)

        Dim palavra As String = leia.ReadLine

        dt.Rows.Add(New Object() {palavra})

        dgtabela.DataSource = dt
        leia.Close()

O erro que dá é o seguinte:

Input array is longer than the number of columns in this table.

O que tem de errado??

Link para o comentário
Compartilhar em outros sites

  • 0
Nem fazendo dessa maneira deu certo:

        Dim dt As New DataTable
        Dim leia As IO.StreamReader
        Dim texto As String
        Dim consulta As String
        Dim linha As Integer
        Dim coluna As Integer

        leia = IO.File.OpenText(nomearq)

        Dim palavra As String = leia.ReadLine

        dt.Rows.Add(New Object() {palavra})

        dgtabela.DataSource = dt
        leia.Close()

O erro que dá é o seguinte:

Input array is longer than the number of columns in this table.

O que tem de errado??

A mensagem de erro já te disse o que está errado... onde você criou a *coluna* nesse código?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Voce diz no caso para mim colocar dt.Columns.Add(texto) ??? Porque pra mim as colunas estavam dentro das chaves do New Object do Rows.Add... é isso então?

Não, uma coisa é você criar as colunas (os campos) e outra coisa é incluir linhas (os registros). No código acima você está tentando incluir um registro em uma DataTable que não tem campos.

Sacou? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Hum, pra mim a DataTable já continha os campos( linhas e colunas ). No caso, eu tenho que adiciona-las então? E no caso e o metodo Add da Propriedade Rows ou Columns, certo? Dessa Maneira:

dt.Rows.Add(8)

No caso estaria adcionando 8 linhas?

Link para o comentário
Compartilhar em outros sites

  • 0

Hum, pra mim a DataTable já continha os campos( linhas e colunas ). No caso, eu tenho que adiciona-las então?

Sim... como você acha que a DataTable saberia a quantidade campos que você quer ter? Você pode querer ter os campos "Código", "Nome" e "Telefone", por exemplo, ou apenas "Código" e "Nome". Por isso você tem que adicionar os campos (Columns).

E no caso e o metodo Add da Propriedade Rows ou Columns, certo? Dessa Maneira:

dt.Rows.Add(8)

No caso estaria adcionando 8 linhas?

Não, o Add só te permite adicionar 1 linha. E você deve passar para ele os valores dos campos *desta* linha. Dê uma olhada no exemplo de criação e preenchimento de uma DataTable deste tópico (é no 6º post): http://scriptbrasil.com.br/forum/index.php?showtopic=67670

Eu acho que você ainda não pegou o espírito da coisa: a DataTable, como o nome sugere, é uma "tabela" (Table) de "dados" (Data). Assim como uma tabela de um banco de dados qualquer. A única diferença no caso é que estamos criando esta tabela em memória e não obtendo-a de um banco de dados. Assim como uma tabela no banco precisa ter uma estrutura (campos/colunas), a DataTable também precisa. E, assim como uma tabela no banco pode ou não ter registros (linhas), a nossa DataTable também. Não é nada útil ter linhas em branco em uma tabela de banco de dados, concorda? Só vai ocupar espaço e dificultar a inserção dos dados (que deverá ser uma edição). Então, eu acho que também não tem muita utilidade colocar linhas em branco na DataTable. Ou seja, eu penso que o ideal seria inserir linha por linha com os dados.

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

não, eu já sabia mais ou menos, isso e que pra uma coisa entra na minha cabeça demora um pouco, ta ligado? Uma coisa interessante.. quando eu adiciono colunas ele não adiciona no campo, adiciona naquele indice da parte de cima dele, voce já percebeu? Como eu faço para contornar isso?

Link para o comentário
Compartilhar em outros sites

  • 0

não, eu já sabia mais ou menos, isso e que pra uma coisa entra na minha cabeça demora um pouco, ta ligado?

Ah tá. Sem problemas. smile.gif

Uma coisa interessante.. quando eu adiciono colunas ele não adiciona no campo, adiciona naquele indice da parte de cima dele, voce já percebeu? Como eu faço para contornar isso?

Não entendi. Como assim "indice na parte de cima dele"?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...