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

Consulta Com Datagrid


alexandremanowar

Pergunta

Olá pessoal

Estou desenvolvendo um pequeno projeto de armazenamento de dados, fiz toda a parte de inclusão e alteração, agora estou com dificuldades em fazer a consulta, eu estou tentando fazer com datagrid mas não estou conseguindo, alguém poderia me dar um exemplo de com realizar a consulta com datagrid, eu tenho os seguintes campos no meu banco SqlServer

´

codigo, nome, endereco

Alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

Você não faz a consulta com a DataGrid, só a exibe nela. A consulta mesmo vai ser feita através de SQL, assim como quando você abre uma tabela (usando um SqlCommand e jogando o resultado para um DataSet, e depois jogando o DataSet para a DataGrid).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara estou tentando fazer mais o meu código está dando errado, por favor me dá mais essa força olha o meu código e me mostra como arrumar os erros:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim cmd As SqlCommand = sqlcon.CreateCommand
            cmd.CommandText = "Select * from cadastro"
            sqlcon.Open()
            cmd.ExecuteNonQuery()


            ds = New DataSet
            ds = cmd.CommandText
            
            DataGrid1.DataSource = ds
        Catch sqlex As SqlException
            MsgBox("não funcionou", MsgBoxStyle.Information, "não Funcionou")
        End Try
    End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

ExecuteNonQuery??? Como você quer obter o resultado (Execute) de uma consulta (Query) dizendo qua a SQL *não* (Non) é uma consulta...? O correto seria algo assim:

        sqlcon.Open()
        Dim cmd As New SqlCommand("Select * from cadastro", sqlcon)
        Dim da As New SqlDataAdapter(cmd)
        Dim ds As New DataSet()
        da.Fill(ds)
        datagrid1.datasource = ds

Se quiser diminuir ainda mais o código é só você colocar os parâmetros de SqlCommand em SqlDataAdapter e remover a linha do primeiro.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara funcionou legal, sem querer ser chato estou vom outra dúvida, fiz toda parte de consulta, porém o cabeçalho da coluna com o nome do campo, e eu gostaria de renomear, por exemplo no SqlServer o nome do campo é cad, end e eu quero que no cabelho do datagrid apareça cadastro, endereço.

Como eu faço isso?

Link para o comentário
Compartilhar em outros sites

  • 0
Cara funcionou legal, sem querer ser chato estou vom outra dúvida, fiz toda parte de consulta, porém o cabeçalho da coluna com o nome do campo, e eu gostaria de renomear, por exemplo no SqlServer o nome do campo é cad, end e eu quero que no cabelho do datagrid apareça cadastro, endereço.

Como eu faço isso?

Acho que o jeito mais fácil de fazer isso é alterando na própria consulta:

SELECT cad as Cadastro, end as Endereço FROM tabela

É claro que aí você vai precisar especificar todos os campos (mas isso é bom, porque as vezes existe um campo ou outro que *não* precisa aparecer para o usuário, então é só não incluí-lo).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Certo cara entendi, e funcionou, porém tem um detalhe, quando é exibida a consulta no datagrid se eu clicar em uma célula qualquer ela se torna ativa, e se eu clico na última célula e teclo enter ele insere outra linha, será que não tem como eu travar isso, ou seja, quando eu clicar em uma célula qualquer ela apenas fique selecionada e não permita edição e também não permita que ao teclar enter na última linha seja inserida uma nova linha, ou seja o datagrid será apenas para consulta!

Tem como fazer isso ?

Link para o comentário
Compartilhar em outros sites

  • 0

Prefiro a DataGrid, já que a ListView não tem uma propriedade DataSource sendo necessário preenchê-la programaticamente.

A ListView é um contêiner de propósito geral que possui "estilos" diferentes, sendo um deles muito parecido com a DataGrid (na propriedade View dela você pode ver os diferentes estilos e esse parecido com a DataGrid é o Details).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara foi o que eu imageinei que o DataGrid e o ListView tinham a mesma função mas o DataGrid é mais funcionau.

Voltando a um velho assunto, eu não consegui bloquear o inserção e edição de linhas no DataGrid. Olha como eu fiz:

O original era esse:

sqlcon.Open()
       Dim cmd As New SqlCommand("Select * from cadastro", sqlcon)
       Dim da As New SqlDataAdapter(cmd)
       Dim ds As New DataSet()
       da.Fill(ds)
       datagrid1.datasource = ds.tables(0)
Aí eu fiz assim:
sqlcon.Open()
       Dim cmd As New SqlCommand("Select * from cadastro", sqlcon)
       Dim da As New SqlDataAdapter(cmd)
       Dim ds As New DataSet()
       da.Fill(ds)
       datagrid1.datasource.ReadyOnly = ds.tables(0)
Não funcionou Tentei assim:
sqlcon.Open()
       Dim cmd As New SqlCommand("Select * from cadastro", sqlcon)
       Dim da As New SqlDataAdapter(cmd)
       Dim ds As New DataSet()
       da.Fill(ds)
       datagrid1.datasource.ReadyOnly = ds.tables(0)

Também não deu certo. Tentei de outras formas e não deu certo todas deram erro na compilação.

Onde eu estou errando cara?

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, a coisa é muito mais simples do que você imagina. Repare que quando você digita "datagrid1.readonly" ela já vai te mostrar que o valor ali deve ser um boolean:

datagrid1.readonly = true

Você tem que prestar atenção naqueles balõezinhos que aparecem e que te mostram tudo que deve ser passado ou definido.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara quanta burrice da minha parte, desculpa minha falta de atenção, funcionou legal cara.

Mas estou gostando de estudar vb.net.

Cara tenho mais uma dívida como eu faço para controlar a largura das colunas do DataGrid?

A outra dúvida não é bem uma dúvida é um comentário, eu fiz um código para armazenar, está funcionado legal, ms eu queria saber se tem como diminuir ou se tem um jeito mais lógico ou simples de fazer, dá uma olhada e por favor me de sua opinião:

Dim cmd As SqlCommand = sqlcon.CreateCommand
        cmd.CommandText = "Insert into cadastro Values(" & Trim(codigo.Text) & ", '" & Trim(nome.Text) & "','" & Trim(endereco.Text) & "')"
        Try
            sqlcon.Open()
            cmd.ExecuteNonQuery()
            sqlcon.Close()
            MsgBox("Confirmação de cadastro", MsgBoxStyle.Information, "Incluindo Registro")

        Catch erro As Exception
            MsgBox("Erro" & vbCrLf & erro.ToString, MsgBoxStyle.Critical, "Erro")


        End Try

Link para o comentário
Compartilhar em outros sites

  • 0

Cara quanta burrice da minha parte, desculpa minha falta de atenção, funcionou legal cara.

Mas estou gostando de estudar vb.net.

smile.gif

Cara tenho mais uma dívida como eu faço para controlar a largura das colunas do DataGrid?

Para isso você tem que aplicar um estilo sobre o DataGrid, sendo algo assim (aliás, assim você pode também definir os nomes das colunas):

        Dim estilo As New DataGridTableStyle(True)
        estilo.MappingName = tabela.TableName
        DataGrid1.TableStyles.Add(estilo)
        estilo.GridColumnStyles("Codigo").HeaderText = "Código:"
        estilo.GridColumnStyles("Codigo").Width = 100
Note que "Codigo" é o campo (o nome é o mesmo que aparece na coluna da grid) que estou mudando o texto e a largura. Você pode explorar também as outras propriedades que existem nesse objeto. Esse código entraria imediamente após a definição de DataGrid1.DataSource.
A outra dúvida não é bem uma dúvida é um comentário, eu fiz um código para armazenar, está funcionado legal, ms eu queria saber se tem como diminuir ou se tem um jeito mais lógico ou simples de fazer, dá uma olhada e por favor me de sua opinião:
Dim cmd As SqlCommand = sqlcon.CreateCommand
        cmd.CommandText = "Insert into cadastro Values(" & Trim(codigo.Text) & ", '" & Trim(nome.Text) & "','" & Trim(endereco.Text) & "')"
        Try
            sqlcon.Open()
            cmd.ExecuteNonQuery()
            sqlcon.Close()
            MsgBox("Confirmação de cadastro", MsgBoxStyle.Information, "Incluindo Registro")

        Catch erro As Exception
            MsgBox("Erro" & vbCrLf & erro.ToString, MsgBoxStyle.Critical, "Erro")


        End Try
Eu adoro os métodos construtores, por isso eu faria assim:
        Dim cmd As New SqlCommand("Insert into cadastro Values(" & Trim(codigo.Text) & ", '" & Trim(nome.Text) & "','" & Trim(endereco.Text) & "')", sqlcon)

        Try
            cmd.ExecuteNonQuery()
            MsgBox("Confirmação de cadastro", MsgBoxStyle.Information, "Incluindo Registro")
        Catch erro As Exception
            MsgBox("Erro" & vbCrLf & erro.ToString, MsgBoxStyle.Critical, "Erro")
        End Try

Além disso, eu não fico abrindo e fechando a conexão a todo momento, por isso sqlcon *já* estaria aberta e *não* seria fechada ali (eu abro a conexão quando programa é aberto e fecho ela quando o programa é fechado).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara usei o método para armazenar, funcionou legal e você tem razão é bem melhor, mais compacto e fácil de ler, deixei também o banco aberto e fechei somente quando o programa for fechado, valeu pelas dicas cara.

Agora o detalhe de redimensionar e nomear as colunas no datagrid não funcionou, está dando um erro nessa linha:

estilo.MappingName = tabela.TableName
Ele está sublinhando o nome tabela dessa linha criei uma variável com esse nome com " Dim tabela", ele tirou o sublinhado exibiu a consulta mas não fez as alterações, olha como eu coloquei:

Dim cmd As New SqlCommand("Select * from cadastro", sqlcon)
            Dim da As New SqlDataAdapter(cmd)
            Dim ds As New DataSet
            da.Fill(ds)
            DataGrid1.ReadOnly = True
            DataGrid1.DataSource = ds.Tables(0)
            

            Dim estilo As New DataGridTableStyle(True)
            
            estilo.MappingName = tabela.TableName
            DataGrid1.TableStyles.Add(estilo)
            estilo.GridColumnStyles("cartao").HeaderText = "Cartão de funcionário:"
            estilo.GridColumnStyles("cartao").Width = 100
            estilo.GridColumnStyles("nome").HeaderText = "Nome do funcionário:"
            estilo.GridColumnStyles("nome").Width = 500
            estilo.GridColumnStyles("endereco").HeaderText = "Endereço:"
            estilo.GridColumnStyles("endereco").Width = 500

Onde está o erro?

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