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

Data Grid


Andersonjb

Pergunta

E ai Gray, beleza? Novamente tive problemas com a Data Grid, acredita? Acho que eu não vou aprender nunca, dry.gif , mas vamos la... Bem, eu tenho o seguinte codigo no evento Load do meu formulário:

        dt.Columns.Add("0")
        dt.Columns.Add("1")
        dt.Columns.Add("2")
        dt.Columns.Add("3")
        dt.Columns.Add("4")
        dt.Columns.Add("5")
        dt.Columns.Add("6")
        dt.Columns.Add("7")
        dt.Columns.Add("8")
        dt.Columns.Add("9")
        dt.Columns.Add("A")
        dt.Columns.Add("B")
        dt.Columns.Add("C")
        dt.Columns.Add("D")
        dt.Columns.Add("E")
        dt.Columns.Add("F")
        For i As Integer = 0 To 14
            dt.Rows.Add(New Object() {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""})
        Next
No caso eu já declarei a Data Table e tudo mais, ai é so a inserção dos dados. Bem, quando eu clico na linha 15, aparece o seguinte: http://img223.imageshack.us/my.php?image=img5ow.jpg Viu aqueles Nulls? Ai eu pensei, bom se eu adicionar mais uma linha não tem problema, ai no for pra adicionar as linhas eu coloquei 15, mais ou menos assim:
        dt.Columns.Add("0")
        dt.Columns.Add("1")
        dt.Columns.Add("2")
        dt.Columns.Add("3")
        dt.Columns.Add("4")
        dt.Columns.Add("5")
        dt.Columns.Add("6")
        dt.Columns.Add("7")
        dt.Columns.Add("8")
        dt.Columns.Add("9")
        dt.Columns.Add("A")
        dt.Columns.Add("B")
        dt.Columns.Add("C")
        dt.Columns.Add("D")
        dt.Columns.Add("E")
        dt.Columns.Add("F")
        For i As Integer = 0 To 14
            dt.Rows.Add(New Object() {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""})
        Next

Bem, ai os nuls deixaram de aparecer, mais apareceu uma linha a mais e desconfigurou todo o meu formulário, olha só:

http://img156.imageshack.us/my.php?image=img26ci.jpg

Viu? Como faço para manter as 15 linhas em vez de 16 só que sem aqueles Nulls?

Link para o comentário
Compartilhar em outros sites

23 respostass a esta questão

Posts Recomendados

  • 0

Veja se isso resolve o caso:

        dt.Columns.Add("0").DefaultValue = String.Empty
        dt.Columns.Add("1").DefaultValue = String.Empty
        dt.Columns.Add("2").DefaultValue = String.Empty
        dt.Columns.Add("3").DefaultValue = String.Empty
        dt.Columns.Add("4").DefaultValue = String.Empty
        dt.Columns.Add("5").DefaultValue = String.Empty
        dt.Columns.Add("6").DefaultValue = String.Empty
        dt.Columns.Add("7").DefaultValue = String.Empty
        dt.Columns.Add("8").DefaultValue = String.Empty
        dt.Columns.Add("9").DefaultValue = String.Empty
        dt.Columns.Add("A").DefaultValue = String.Empty
        dt.Columns.Add("B").DefaultValue = String.Empty
        dt.Columns.Add("C").DefaultValue = String.Empty
        dt.Columns.Add("D").DefaultValue = String.Empty
        dt.Columns.Add("E").DefaultValue = String.Empty
        dt.Columns.Add("F").DefaultValue = String.Empty
        For i As Integer = 0 To 14
            dt.Rows.Add(New Object() {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""})
        Next

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Então você não se ligou no que eu disse antes: os índices vão de 0 a 14, ou seja, 15 linhas. Se você quer preencher a 15ª linha você vai utilizar o índice 14 e se você quiser a primeira você vai utilizar o índice 0 (1 é a segunda, 2 é a terceira, e assim por diante).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Mas não é esse o meu erro, eu sei desse padrão dos indices. Tanto que a posição que eu quero inserir os dados é pegada da onde aquele tracinho que pisca fica. Olha só o codigo:

        Dim dt As DataTable = dgtabela.DataSource
        Dim linha As Integer = dgtabela.CurrentCell.RowNumber
        Dim coluna As Integer = dgtabela.CurrentCell.ColumnNumber
        MsgBox(linha)
        MsgBox(coluna)

        dt.Rows(linha)(coluna) = "A"

        If coluna = 15 Then
            coluna = 0
            linha = linha + 1
        Else
            coluna = coluna + 1
        End If
        dt.Rows(linha)(coluna) = "B"

        If coluna = 15 Then
            coluna = 0
            linha = linha + 1
        Else
            coluna = coluna + 1
        End If
        dt.Rows(linha)(coluna) = "C"

Ele pega a posição do cursor e vai inserindo os dados... o que está errado ai?

Link para o comentário
Compartilhar em outros sites

  • 0

Pow, sei não, posso dar uma sugestão? Muda esse 15 do if pra 14 e testa pra ver.

Não, porque esse if determina o meu numero de colunas, e não e nas minhas colunas que eu tenho problemas, são nas linhas.

Em qual evento você colocou isso? Tem certeza de que a linha existe?

Coloquei em um Menu. Tenho, olha só:

       dt.Columns.Add("0").DefaultValue = String.Empty
       dt.Columns.Add("1").DefaultValue = String.Empty
       dt.Columns.Add("2").DefaultValue = String.Empty
       dt.Columns.Add("3").DefaultValue = String.Empty
       dt.Columns.Add("4").DefaultValue = String.Empty
       dt.Columns.Add("5").DefaultValue = String.Empty
       dt.Columns.Add("6").DefaultValue = String.Empty
       dt.Columns.Add("7").DefaultValue = String.Empty
       dt.Columns.Add("8").DefaultValue = String.Empty
       dt.Columns.Add("9").DefaultValue = String.Empty
       dt.Columns.Add("A").DefaultValue = String.Empty
       dt.Columns.Add("B").DefaultValue = String.Empty
       dt.Columns.Add("C").DefaultValue = String.Empty
       dt.Columns.Add("D").DefaultValue = String.Empty
       dt.Columns.Add("E").DefaultValue = String.Empty
       dt.Columns.Add("F").DefaultValue = String.Empty
       For i As Integer = 0 To 14
           dt.Rows.Add(New Object() {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""})
       Next

Nesse for de 0 até 14, eu não tenho 15 linhas?

Link para o comentário
Compartilhar em outros sites

  • 0
Pow, sei não, posso dar uma sugestão? Muda esse 15 do if pra 14 e testa pra ver.

Não, porque esse if determina o meu numero de colunas, e não e nas minhas colunas que eu tenho problemas, são nas linhas.

Em qual evento você colocou isso? Tem certeza de que a linha existe?

Coloquei em um Menu. Tenho, olha só:

       dt.Columns.Add("0").DefaultValue = String.Empty
       dt.Columns.Add("1").DefaultValue = String.Empty
       dt.Columns.Add("2").DefaultValue = String.Empty
       dt.Columns.Add("3").DefaultValue = String.Empty
       dt.Columns.Add("4").DefaultValue = String.Empty
       dt.Columns.Add("5").DefaultValue = String.Empty
       dt.Columns.Add("6").DefaultValue = String.Empty
       dt.Columns.Add("7").DefaultValue = String.Empty
       dt.Columns.Add("8").DefaultValue = String.Empty
       dt.Columns.Add("9").DefaultValue = String.Empty
       dt.Columns.Add("A").DefaultValue = String.Empty
       dt.Columns.Add("B").DefaultValue = String.Empty
       dt.Columns.Add("C").DefaultValue = String.Empty
       dt.Columns.Add("D").DefaultValue = String.Empty
       dt.Columns.Add("E").DefaultValue = String.Empty
       dt.Columns.Add("F").DefaultValue = String.Empty
       For i As Integer = 0 To 14
           dt.Rows.Add(New Object() {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""})
       Next

Nesse for de 0 até 14, eu não tenho 15 linhas?

Sim:

0 = 1ª Linha

1 = 2ª Linha

2 = 3ª Linha

3 = 4ª Linha

4 = 5ª Linha

5 = 6ª Linha

6 = 7ª Linha

7 = 8ª Linha

8 = 9ª Linha

9 = 10ª Linha

10 = 11ª Linha

11 = 12ª Linha

12 = 13ª Linha

13 = 14ª Linha

14 = 15ª Linha

Note que a última linha é o índice 14.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Então me diz, se sótem 15 linhas, porque aparecem 16, olha so, conta ai:

http://img133.imageshack.us/my.php?image=img31gi.jpg

E essa "16º linha" é que não esta acessivel...

Tem um asterisco ("*") nela? Se tiver, está certo, porque esta última linha é o meio de adicionar uma nova linha na datagrid. Você tem 15 linhas de verdade, e a 16ª só existe para que você possa adiconar mais uma (depois de preencher algum campo nela é que ela passa a existir). Depois que a 16ª passar a existir, você vai ver que existirá uma 17ª (agora com o asterisco) e assim por diante. Esse é o procedimento normal.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Bem, e como faço para utilizar essa 16º linha sem adicionar mais uma?

O jeito seria bloquear a inserção de novas linhas na DataGrid. Não sei se tem uma propriedade para isso, mas vale dar uma pesquisada a respeito. Mais tarde vou dar uma olhada e te retorno a respeito.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Não, Gray, acho que você não entendeu, eu não quero bloquear a inserção dos dados, por exeplo, nesse artigo ai o cara usou esse codigo pra não ser inseridos mais dados a partir da linha determinada:

        If (dgtabela.CurrentCell.RowNumber > 15) Then
            dgtabela.CurrentCell = New DataGridCell(15, dgtabela.CurrentCell.ColumnNumber)
        End If
Mas isso, eu tinha resolvido apenas com isso aqui:
        dgtabela.ReadOnly = dgtabela.CurrentRowIndex > 15

O que eu quero é que a linha inserida depois não apareça, entendeu?

Link para o comentário
Compartilhar em outros sites

  • 0
Não, Gray, acho que você não entendeu, eu não quero bloquear a inserção dos dados, por exeplo, nesse artigo ai o cara usou esse codigo pra não ser inseridos mais dados a partir da linha determinada:

        If (dgtabela.CurrentCell.RowNumber > 15) Then
            dgtabela.CurrentCell = New DataGridCell(15, dgtabela.CurrentCell.ColumnNumber)
        End If
Mas isso, eu tinha resolvido apenas com isso aqui:
        dgtabela.ReadOnly = dgtabela.CurrentRowIndex > 15
O que eu quero é que a linha inserida depois não apareça, entendeu?
Então você não leu a página toda, porque tem uma outra dica lá para o seu caso:
dt.DefaultView.AllowNew = False

Teste isso aí e veja se dá certo.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Ué, mas em que evento eu coloco isso? E outra: os dados estão sendo inseridos diretamente na Data Grid, e não pela DataTable... dá certo mesmo assim?

Pode ser depois daquele For... Next, antes de definir:

DataGrid1.DataSource = dt

E, é claro que você está utilizando uma datatable sim (os dados são inseridos pela grade, mas onde eles ficam armazenados? Na DataTable. smile.gif).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Putz, funcionou! valeu Gray! biggrin.gif . Mas eu não entendi bulhufas, o que esse código diz ao meu programa?

DefaultView é o objeto padrão que define a visualização da tabela. No caso, "AllowNew" significa, literamente, "PermitirNovo", e o que estamos fazendo é dizer que não é permitido (False) adicionar um novo registro.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
DefaultView é o objeto padrão que define a visualização da tabela.

Não entendi ainda, rsrs.

Quando se trata de Banco de Dados, uma View (uma Visão) é a maneira pela qual você personaliza como os dados serão exibidos. Em .NET existe um objeto para representar isso, que é o DataView. Cada DataTable tem um DataView que você pode obter pela propriedade DefaultView (que significa, literalmente, "VisãoPadrão"). Através deste objeto você tem como ordenar, procurar, filtrar, etc. os dados da datatable. Sacou? wink.gif

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,5k
×
×
  • Criar Novo...