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

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

Então no caso assim estaria correto?

Link para o comentário
Compartilhar em outros sites

  • 0

       Dim dt As New DataTable
       For i As Integer = 0 To 15
           dt.Rows.Add(Hex(i))
           dt.Columns.Add(Hex(i))
       Next
       dgtabela.DataSource = dt
Então no caso assim estaria correto?
Não... para dt.Rows.Add() você tem que passar os conteúdos das colunas para a linha que deve ser adicionada. Abaixo seguem dois exemplos simples disso:
        Dim dt As New DataTable

        dt.Columns.Add("Coluna1")
        dt.Columns.Add("Coluna2")
        dt.Columns.Add("Coluna3")

        For i As Integer = 0 To 15
            dt.Rows.Add(New Object() {"conteúdo da coluna1", "conteúdo da coluna2", "conteúdo da coluna3"})
        Next

        dgTabela.DataSource = dt
Ou:
        Dim dt As New DataTable

        dt.Columns.Add("Coluna1")
        dt.Columns.Add("Coluna2")
        dt.Columns.Add("Coluna3")

        For i As Integer = 0 To 15
            Dim linha As DataRow = dt.Rows.Add(New Object() {})
            linha.Item(0) = "conteúdo da coluna1"
            linha.Item(1) = "conteúdo da coluna2"
            linha.Item(2) = "conteúdo da coluna3"
        Next

        dgTabela.DataSource = dt

Sacou? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Não Gray, eu não queria adicionar dados no Data Grid, mas sim o seu indice. Bem, tem como eu colocar uma figura do meu computador aqui para lhe mostrar mais ou menos como eu quero? Eu tentei colocar uma imagem, mas parece que tem que puxar de um link da internet...

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui Hospedar, da so uma olhada nesse programa:

Figura

Bem, voce viu essa DataGrid? Eu queria que as bordas dela ficassem dessa maneira, adicionando nas Colunas eu consegui, mas nas linhas não. Qual e a propriedade em que eu posso adicionar caracteres na "borda" da DataGrid?

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui fazer sobrescrevendo o método OnPaint da DataGrid. Para isso, utilize aquela classe (MyDataGrid) que eu te passei no outro tópico (Data Grid - Scroll), adicionando o seguinte método nela:

        Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(pe)

            If Not Me.DataSource Is Nothing Then
                Dim info As HitTestInfo = Me.HitTest(10, 48)

                If info.Type = DataGrid.HitTestType.RowHeader Then
                    Dim fonte As New Font("Tahoma", 8)
                    Dim cor As Brush = Drawing.Brushes.Blue
                    Dim posY As Long
                    Dim posX As Long

                    For i As Integer = info.Row To info.Row + Me.VisibleRowCount
                        Try
                            posX = Me.GetCellBounds(i, 0).X - 30
                            posY = Me.GetCellBounds(i, 0).Y
                        Catch ex As Exception
                            posX = -1
                            posY = -1
                        End Try
                        If posX >= 0 And posY >= 0 Then
                            Dim área As New RectangleF(posX, posY, 30, 30)

                            pe.Graphics.DrawString(i.ToString(), fonte, cor, área)
                        End If
                    Next
                End If
            End If
        End Sub

É só acrescentar este método e executar o programa para ver as linhas numeradas.

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
OPa, valeu gray! E como uso esse metodo? Tentei chamar ele aqui e não consegui... como faço e quais são seus parametros?

Você não terá que chamá-lo. Só dele estar presente na classe MyDataGrid a datagrid deverá mostrar os números. Se você não conseguiu aí, baixe este projeto de exemplo: http://www.graymalkin.globalhosts.com.br/s.../BinEditor2.zip

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Isso, deu certo aqui, so que tem dois probleminhas: eu preciso que os numeros sejam sempre mostrados, entendeu? não quando vai pulado a linha dos datagrids, e mas que eles sejam fixos ali. Como posso fazer isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Isso, deu certo aqui, so que tem dois probleminhas: eu preciso que os numeros sejam sempre mostrados, entendeu? não quando vai pulado a linha dos datagrids, e mas que eles sejam fixos ali. Como posso fazer isso?

Como assim? Eles são sempre mostrados, não? Veja a figura abaixo:

http://www.graymalkin.globalhosts.com.br/stuff/imagem1.jpg

Não seria assim? huh.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, quando o arquivo e aberto, não e verdade?

Sim, a datagrid só vai exibir dados se existirem dados para serem exibidos.

Mas e se eu quisesse parar no Numero 15, e não pudessem ser inseridos mais dados a partir dali, o que eu teria que fazer?

Aí não tem nada haver com o fato de aparecem números ali ou não... O que você quer é apagar todas linhas abaixo da 15ª linha, por exemplo? Isso poderia ser feito utilizando o método Delete() de cada DataRow da DataTable do 16º registro em diante. Desta maneira, só restariam os 15 primeiros registros e só estes seriam gravados.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
E mais uma perguntinha Gray: se eu quissese escrever dados a partir de uma determinada linha(coluna), como eu poderia fazer isso?

Do mesmo jeito que acima. No caso acima, eu defino a propriedade ReadOnly (Somente-Leitura) como verdadeiro ou falso dependendo da condição. Uma condição contrária aquela (como a que você quer), também seria válida.

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

não, eu digo da seguinte maneira: eu tenho uma celula selecionada, de repente eu aperto o botao direito do mouse e no meu menu eu aperto um comando que comece a escrever a ártir daquela celula selecionada, como eu faço isso?

Link para o comentário
Compartilhar em outros sites

  • 0
não, eu digo da seguinte maneira: eu tenho uma celula selecionada, de repente eu aperto o botao direito do mouse e no meu menu eu aperto um comando que comece a escrever a ártir daquela celula selecionada, como eu faço isso?

Você vai ter que guardar a linha e coluna selecionada, e utilizar estas informações na condição acima. Ou seja, ainda é do mesmo jeito (só o que vai mudar é a condição).

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, voce diz dessa maneira correto:

        Dim dt As New DataTable
        Dim obj As New Point
        Dim x As Integer
        Dim y As Integer
        Dim linha As DataRow
        Dim coluna As DataColumn

        obj.X = dgtabela.CurrentCell.ColumnNumber
        obj.Y = dgtabela.CurrentCell.RowNumber
        x = obj.X
        y = obj.Y

        For Each linha In dt.Rows
            For Each coluna In dt.Columns
                If linha(coluna) = x Then
                    dt.Columns.Add("A")
                End If
            Next
        Next

O Problema e que essa condição na bate... qual seria a condição certa neste caso?

Link para o comentário
Compartilhar em outros sites

  • 0

Putz, não saquei... ohmy.gif como assim linha clicada "seria um campo da classe que guardaria posição da linha clicada" ?

Voce quer dizer dessa maneira:

dgtabela.ReadOnly = dgtabela.CurrentRowIndex >= dgtabela.CurrentCell.RowNumber

E isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Você vai escolher uma opção do seu menu certo? Nesse instante, vai haver uma célula selecionada, certo? Então, *nesse momento* você vai guardar a linha selecionada em um algum lugar (um variável qualquer). Isso porque depois, no evento CurrentCellChanged, você vai precisar saber qual a linha em que o caboclo estava quando selecionou a opção do menu (para que tudo para baixo dela possa ser editado e tudo para cima não).

Entendeu agora? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, eu consegui, olha só:

        Dim x As String
        Dim y As String
        Dim dt As New DataTable

        x = dgtabela.CurrentCell.ColumnNumber
        y = dgtabela.CurrentCell.RowNumber
        dgtabela.ReadOnly = dgtabela.CurrentRowIndex < y

        dt.Columns.Add("K")
        dt.Columns.Add("J")
        dt.Columns.Add("Ç")

        For i As Integer = 0 To 14
            dt.Rows.Add(New Object() {"vx", "vx", "vx"})
        Next

O problema agora está na hora de adicionar os dados, sempre da erro. O que eu estou fazendo de errado?

Link para o comentário
Compartilhar em outros sites

  • 0
Bem, eu consegui, olha só:

        Dim x As String
        Dim y As String
        Dim dt As New DataTable

        x = dgtabela.CurrentCell.ColumnNumber
        y = dgtabela.CurrentCell.RowNumber
        dgtabela.ReadOnly = dgtabela.CurrentRowIndex < y

        dt.Columns.Add("K")
        dt.Columns.Add("J")
        dt.Columns.Add("Ç")

        For i As Integer = 0 To 14
            dt.Rows.Add(New Object() {"vx", "vx", "vx"})
        Next

O problema agora está na hora de adicionar os dados, sempre da erro. O que eu estou fazendo de errado?

Sinceramente não entendi o que você quer... Os dados deveriam ser adicionados na DataTable (ou na origem dos dados da DataGrid).

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...