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

Utilizar Datagrid


kuroi

Pergunta

estava tentando usar o datagrid do .NET com RecordSet do ADO... mas acho que isso não é possivel, não??

tipo, é a primeira vez que mexo com acesso a dados no Visual Basic .NET... e parece que não se usa mais ADO hj em dia, não?? aqueles do VB6, connection e recordset...

eu teria que adicionar o componente do ADO DataGrid no meu projeto, certo??? e utilziar esse...

mas vocês recomendariam isso??? ou o melhor seria eu usar os objetos DataTable, etc do .NET??

nesse caso, como faco a conexao com o banco de dados??

e como executo uma query?? acho que teria que usar o objeto SqlCommand, certo?? mas essa opcao não aparece na lista na hora de criar o objeto?? preciso adicionar alguma referencia?? ou isso é da minha versao (2003). qual o objeto eu teria que utilizar??

valeu aí

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Eu opto sempre por utilizar componentes nativos da .NET Framework. Neste caso, você usaria as classes OleDbConnection ou SqlConnection, para criar um objeto de conexão, e depois as classes OleDbCommand ou SqlCommand para realizar uma query. Sendo que, assim como Neston, existem mil e uma maneiras diferentes de se fazer isso. Quanto a utilização da DataGrid, basta atribuir um objeto DataSet, DataTable ou qualquer um que implemente a interface IList (como arrays).

(Ah, note que os objetos começados por "OleDb" são para bancos com drivers OleDB, como o Access. Já os iniciados por "Sql" são para utilização com o SQL Server e compatíveis.)

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

que saco... tenho que fechar o datareader, sempre que uso... isso beleza... mas to tendo problemas...

se tipo, eu executo uma query num datareader, mesmo que eu use outro objeto datereader, não consigo executar outra query a não ser que eu feche o primeiro datareader. ou mesmo que eu use outro sqlcommand. se eu precisar fazer dois selects e comparar os dois... como fazer???

valeu aee

Link para o comentário
Compartilhar em outros sites

  • 0

que saco... tenho que fechar o datareader, sempre que uso... isso beleza... mas to tendo problemas...

se tipo, eu executo uma query num datareader, mesmo que eu use outro objeto datereader, não consigo executar outra query a não ser que eu feche o primeiro datareader. ou mesmo que eu use outro sqlcommand. se eu precisar fazer dois selects e comparar os dois... como fazer???

valeu aee

Por que você não usa DataSets ou DataTables? O DataReader é um meio rápido de se ler uma tabela, mas não oferece a vantagem de se poder navegar entre os registros.

outra coisa, como eu faco pra alterar o tamanho de colunas especificas no datagrid??

Qual a versão da Framework?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Por que você não usa DataSets ou DataTables? O DataReader é um meio rápido de se ler uma tabela, mas não oferece a vantagem de se poder navegar entre os registros.

valeu, vo ver isso. uma otra solucao seria criar otro objeto de conexao, mas acho que o jeito que você falou deve ser melhor

Qual a versão da Framework?

não sei, que não to no pc agora, mas é a que vem no .NET 2003, deve ser 1.alguma coisa.

porque?? tem alguma diferenca no datagrid??

Link para o comentário
Compartilhar em outros sites

  • 0

Por que você não usa DataSets ou DataTables? O DataReader é um meio rápido de se ler uma tabela, mas não oferece a vantagem de se poder navegar entre os registros.

valeu, vo ver isso. uma otra solucao seria criar otro objeto de conexao, mas acho que o jeito que você falou deve ser melhor

Qual a versão da Framework?

não sei, que não to no pc agora, mas é a que vem no .NET 2003, deve ser 1.alguma coisa.

porque?? tem alguma diferenca no datagrid??

Então é a 1.1. E sim, têm diferenças da DataGrid da Framework 1.x (VS 2002 e 2003) para a da Framework 2.0 (VS 2005). Para personalizar as colunas você tem que criar um objeto DataGridTableStyle, criar objetos DataGridColumnStyle (um para cada coluna), adicioná-los ao primeiro, e adicionar este a coleção de estilos da grade (GridColumnStyles).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

valeu, mas eu queria mudar o tamanho da coluna de acordo com o tamanho maximo que eu dei pros campos varchar quando criei a tabela no banco. so que não sei qual a propriedade do DataSet que eu devo acessar. deem uma olhada:

    Private Sub frmPesquisa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ds As New DataSet, sda As New SqlClient.SqlDataAdapter("SPPR_SELECIONA_CLIENTE_TODOS_ALIAS", cn)

        sda.Fill(ds)        
        gridPesquisa.DataSource = ds
        gridPesquisa.NavigateTo(0, "Table")

        ConfiguraGrid(gridPesquisa, ds)
    End Sub



    Private Sub ConfiguraGrid(ByVal grid As DataGrid, ByVal ds As DataSet)
        Dim i As Integer, gt As New DataGridTableStyle(True)

        gt.MappingName() = ds.Tables(0).TableName
        grid.TableStyles.Add(gt)

        grid.RowHeaderWidth = 25
        For i = 0 To ds.Tables(0).Columns.Count - 1
            If ds.Tables(0).Columns(i).DataType Is (New System.Int32).GetType Then
                gt.GridColumnStyles(i).Width = 30
            ElseIf ds.Tables(0).Columns(i).DataType Is "".GetType Then
                gt.GridColumnStyles(i).Width = ds.Tables(0).Columns(i).NAOSEIQUEPROPRIEDADEEUPONHOAQUI!!!!!! * 1.5
            End If
        Next
    End Sub[/code]

fiz uma sub pra formatar todos os grids que eu quiser do mesmo jeito, so passando cmo parametros o grid e o dataset. a unica coisa que falta e mudar o tamanho. já tentei a propriedade maxlenght, mas ela tem sempre o valor -1. tem jeito de fazer isso??

otra coisa, se vocês puderem da uma olhada pra dexar meu codigo mais bunitinho agradeco. tipo por exemplo, como não sei comparar tipos e fiz assim ElseIf ds.Tables(0).Columns(i).DataType Is "".GetType Then. não sei se é assim que se costuma fazer, mas se tiver um jeito mais "certo", me ensinem como fazer aí.

valeu

EDITADO:

otra coisa, como faco pra selecionar uma linha especifica do grid?? tipo o cara digita um texto pra pesquisar em determinado campo. ai se eu encontro, como faco pra posicionar na linha certa?? tentei pela propriedade currentrow, mas ele não muda.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Experimente assim:

        Dim ds As New DataSet
        Dim gt As New DataGridTableStyle

        gt.MappingName() = ds.Tables(0).TableName

        For Each coluna As DataColumn In ds.Tables(0).Columns
            Select Case coluna.DataType.ToString()
                Case "System.Int32"
                    gt.GridColumnStyles(coluna.Ordinal).Width = 30
                Case "System.String"
                    gt.GridColumnStyles(coluna.Ordinal).Width = coluna.MaxLength * 1.5
            End Select
        Next coluna

        grid.TableStyles.Add(gt)

Sendo que o ideal seria usar uma função (GetTextExtentPoint32, da API Win32) para calcular o tamanho (em pixels) do texto, pois o mesmo é variável de acordo com a fonte utilizada.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Experimente assim:

        Dim ds As New DataSet
        Dim gt As New DataGridTableStyle

        gt.MappingName() = ds.Tables(0).TableName

        For Each coluna As DataColumn In ds.Tables(0).Columns
            Select Case coluna.DataType.ToString()
                Case "System.Int32"
                    gt.GridColumnStyles(coluna.Ordinal).Width = 30
                Case "System.String"
                    gt.GridColumnStyles(coluna.Ordinal).Width = coluna.MaxLength * 1.5
            End Select
        Next coluna

        grid.TableStyles.Add(gt)[/code] Sendo que o ideal seria usar uma função (GetTextExtentPoint32, da API Win32) para calcular o tamanho (em pixels) do texto, pois o mesmo é variável de acordo com a fonte utilizada. Abraços, Graymalkin mesmo coisa, o maxlenght é -1 pra todas as colunas. vo te que usar essa api mesmo?? alias, se eu dexar o grid.TableStyles.Add(gt) depois do for, como você fez, ele da erro. diz que:
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll Additional information: Index was out of range. Must be non-negative and less than the size of the collection.
na linha gt.GridColumnStyles(coluna.Ordinal).Width = 30 ------------------------------------------------------------------------------------------ esse:
otra coisa, como faco pra selecionar uma linha especifica do grid?? tipo o cara digita um texto pra pesquisar em determinado campo. ai se eu encontro, como faco pra posicionar na linha certa?? tentei pela propriedade currentrow, mas ele não muda.
eu descobri:
[code]Dim cc As DataGridCell
cc.RowNumber = 0
cc.ColumnNumber = gridPesquisa.CurrentCell.ColumnNumber

gridPesquisa.CurrentCell = cc

Link para o comentário
Compartilhar em outros sites

  • 0

otra coisa, tenho um campo no dataset, que preciso dele no dataset mas não pode aparecer no grid. tem como fazer??

Acho que você pode colocar a Width desta coluna como 0 (zero). Já tentou isso? Quanto ao caso do MaxLength, eu realmente nunca usei essa propriedade e achei que ela fosse te informar o tamanho máximo do campo. O que você poderia fazer então é colocar os tamanhos manualmente (é o que eu faço).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que você pode colocar a Width desta coluna como 0 (zero). Já tentou isso?

hahahaha já, mas quando o cara puxa como se fosse redimensionar a coluna ela aparece

Quanto ao caso do MaxLength, eu realmente nunca usei essa propriedade e achei que ela fosse te informar o tamanho máximo do campo. O que você poderia fazer então é colocar os tamanhos manualmente (é o que eu faço).

e o jeito... mas vamo tentando, quando descobrir alguma coisa, posto aqui

mas pra falar a verdade, acho que o certo seria retornar sim o tamanho do campo, se não pra que ia servir essa propriedade?? o que deve estar acontecendo deve ser tipo um caso particular meu, tipo configuracao do sql, alguma coisa no objeto do select (dataset), ou na conexao, coisa assim...

quando tiver o tempo, testo essa propriedade em otro banco.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

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