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

Datagrid


alexandremanowar

Pergunta

E a e pessoal

Estou trabalhando com winform em vb.net e desenvolvi uma consulta no banco feito em SqlServer e joguei no DataGrid, funcionou legal. Porém nesse banco tem dua colunas que eu pego o valor e somo armazenando o valor em uma variável e eu gostaria de exibir esse valor no DataGrid também. Tem como adicionar uma coluna no DataGrid para exibire esse resultado.

Por exemplo a coluna dias trabalhados é multiplicada pala coluna valetransporte o resultado eu exibo nessa coluna que quero adicionar

É possível fazer isso?

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Cara beleza valeu pela força, meu estou tentando fazer um esquema aqui desde o dia que fiz esse post. É o seguinte, tenho um banco de dados que armazena produtos que estão entrando em um determinado dia todo produto que entra é cadastrado toda vez que um produto é cadastrado junto é armazenado o dia que está sendo feito o cadastro, para isso eu tenho no meu banco três campos: dia,mes e ano.

Quando eu listo isso no DataGride ele mostra cada produto em uma linha se no dia 9 entrou 3 produtos ele joga cada um em uma linha, porém eu gostaria que ele liste da seguinte forma: na primeira coluna ele lista os campos dia,mes e ano e todos os produtos que foram por exemplo cadastrado no dia 9 ele liste tudo em uma mesma linha um do lado do outro ao invés de ficar jogando cada produto em uma linha. Aí fica assim:

Assim seria a exibição normal no DataGrid:

DIA|MES|ANO|PRODUTO

9    9      05      p1

9    9      05      p2

9    9      05      p3

10    9      05      p1

10    9      05      p2

Seria o padrão um produto por linha,

Eu gostaria que fique assim:

DIA|MES|ANO|PRODUTO|PRODUTO|PRODUTO

9  |  9  |  05 |      p1    |      p2    |      p3

10      9    05        p1            p2

Os produtos do dia 9 fica tudo na mesma linha, é adicionado outra linha apenas quando muda o dia

Seria mais ou menos isso,

É possível fazer isso?

A ordem da listagem eu sei fazer basta jogar no select os campos mas os demais detalhes não consigo

Link para o comentário
Compartilhar em outros sites

  • 0

O problema aí é que fica difícil definir a quantidade de colunas que deverão existir. Note que sua primeira linha vai ter 3 produtos, mas a segunda só vai ter 2. Não sei se seria possível fazer algo assim com SQL, mas você pode sempre recorrer ao preenchimento manual da datagrid. Dessa maneira você teria que percorrer a tabela e ir "juntando" os produtos para todas as datas existentes (você pode até criar uma DataTable em memória e ir armazenando nela, para depois ficar mais fácil de jogar na grade).

Não haveria alguma outra maneira de representar o que você quer? Talvez uma TreeView?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Certo foi o que eu imaginei

O que é um TreeView e como eu usaria para um trabalho como esse?

O exemplo que deixei acima é exatamente o projeto que estou fazendo

você poderia me ensinar a trabalhar com o TreeView

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Uma TreeView é uma árvore onde cada nó pode conter sub-nós. Os nós podem ser as datas e os respectivos sub-nós seriam os produtos referentes àquela data. Tente utilizar a TreeView aí e qualquer coisa, dê um grito que eu tento ajudar.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara preciso de um tutorial para estudar esse TreeView, não sei como começar, existe alguma apostila ou tutorial que eu possa baixar e estudar?

você poderia me indicar também um bom livro para trabalhar com vb.net para desktop e web?

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, não tem mistério na utilização da TreeView não. Dê uma olhada em um exemplo simples:

        Dim pai As TreeNode = TreeView1.Nodes.Add("Nó Pai")
        pai.Nodes.Add("Nó Filho 1")
        pai.Nodes.Add("Nó Filho 2")

        Dim pai2 As TreeNode = TreeView1.Nodes.Add("Nó Pai 2")
        pai2.Nodes.Add("Nó Filho 3")
        pai2.Nodes.Add("Nó Filho 4")

Execute aí e veja o resultado.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara testei o TreeView e ele é uma boa alternativa, valeu pela dica já estou trabalhando com ele.

Eu gostaria de aprender a usar o ListView, Como eu faço para listar informações de uma tabela que contenha por exemplo três colunas : nome,endereco e bairro usando ListView.

você pode me ajudar?

Valeu

um abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Segue aí um exemplo simples:

        ListView1.View = View.Details

        Dim colunas(2) As ColumnHeader
        colunas(0) = New ColumnHeader
        colunas(0).Text = "Nome:"
        colunas(1) = New ColumnHeader
        colunas(1).Text = "Endereço:"
        colunas(2) = New ColumnHeader
        colunas(2).Text = "Bairro:"
        ListView1.Columns.AddRange(colunas)

        Dim it As ListViewItem
        it = ListView1.Items.Add("Pessoa 1")
        it.SubItems.Add("Endereço 1")
        it.SubItems.Add("Bairro 1")

        it = ListView1.Items.Add("Pessoa 2")
        it.SubItems.Add("Endereço 2")
        it.SubItems.Add("Bairro 2")

Onde "ListView1" é a ListView presente no form.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara valeu com listview eu consegui fazer aquele modelo que falei acima, ficou legal encaixou certinho com a minha necessidade. Olha o código, se você achar um modo mais compacto de fazer ou melhor me corrija por favor:

Dim consultarelatorio As New SqlCommand("select * from pontofunc where funcionario = '" & Trim(func) & "' and  ano = " & Trim(ano) & " and mes = " & Trim(mesport) & "", sqlcon)
            Dim da2 As New SqlDataAdapter(consultarelatorio)
            Dim ds2 As New DataSet
            da2.Fill(ds2)

            listafunc.View = View.Details
            Dim coluna(8) As ColumnHeader
            coluna(0) = New ColumnHeader
            coluna(0).Text = "DIA"
            coluna(1) = New ColumnHeader
            coluna(1).Text = "ENTRADA"
            coluna(2) = New ColumnHeader
            coluna(2).Text = "SAÍDA"
            coluna(3) = New ColumnHeader
            coluna(3).Text = "ENTRADA"
            coluna(4) = New ColumnHeader
            coluna(4).Text = "SAÍDA"
            coluna(5) = New ColumnHeader
            coluna(5).Text = "ENTRADA"
            coluna(6) = New ColumnHeader
            coluna(6).Text = "SAÍDA"
            coluna(7) = New ColumnHeader
            coluna(7).Text = "ENTRADA"
            coluna(8) = New ColumnHeader
            coluna(8).Text = "SAÍDA"
            listafunc.Columns.AddRange(coluna)

            Dim item As ListViewItem
            Dim item2, item3, item4
            Dim registro
            Dim i = 0
            For Each registro In ds2.Tables(0).Rows
                If registro("dia") = 17 Then

                    While i < 1
                        item = listafunc.Items.Add(registro("dia"))
                        i = i + 1
                    End While

                    item2 = registro("horaentrada") & ":" & registro("minutoentrada")
                    item.SubItems.Add(item2)
                    item3 = registro("horasaida") & ":" & registro("minutosaida")
                    item.SubItems.Add(item3)



                End If

            Next

O que você achou?

Link para o comentário
Compartilhar em outros sites

  • 0

Tá legal o código. Apenas você deveria começar a se acostumar com colocar os tipos dos objetos para melhorar a performance:

Dim item2, item3, item4
Dim registro
Dim i = 0
Ou seja:
Dim item2, item3, item4 As String
Dim registro As DataRow
Dim i As Integer = 0

Por mais que late-binding seja mais gostoso de se trabalhar, perde-se em performance. É uma pena que VB não possa inferir os tipos automaticamente.

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,2k
    • Posts
      652k
×
×
  • Criar Novo...