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

Data Grid


alexandremanowar

Pergunta

11 respostass a esta questão

Posts Recomendados

  • 0

E ae Graymalkin beleza

Cara perdoe o meu erro, cometi uma falha, essas dúvidas que postei acima não é para DataGrid é para ListView. Depois que comeceia a ler o link que você mandou pensei, "porque ele colocou o link de quando eu estava aprendendo sobre Datagrid", aí foi que reparei que coloquei o tópico "DataGrid" Me perdoe cara.

Mas corrigindo, essas dúvidas acimas são para ListView.

Como eu faço para controlar formatação?

Já tentei usar igual fiz no DataGrid ma não está dando certo.

Link para o comentário
Compartilhar em outros sites

  • 0

Na ListView é mais fácil que na DataGrid. Veja os exemplos abaixo:

        ListView1.View = View.Details
        ListView1.Columns.Add("coluna1", 100, HorizontalAlignment.Left)
        ListView1.Columns.Add("coluna2", 100, HorizontalAlignment.Left)
        ListView1.ForeColor = Color.Blue

        Dim it As New ListViewItem("teste")
        it.SubItems.Add("outro teste")
        ListView1.Items.Add(it)

        it = New ListViewItem("mais um teste")
        it.SubItems.Add("e ainda outro teste")
        it.ForeColor = Color.Red
        ListView1.Items.Add(it)

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Legal cara entendi!

Como eu faço para não permitir que o usuário consiga redimensionar o tamanho das coluna com o mouse?

Porque eu deixo um tamanho mas pode ser redimensionado com o mouse e quero tirar isso, para ficar padrão

Link para o comentário
Compartilhar em outros sites

  • 0

Legal cara entendi!

biggrin.gif

Como eu faço para não permitir que o usuário consiga redimensionar o tamanho das coluna com o mouse?

Porque eu deixo um tamanho mas pode ser redimensionado com o mouse e quero tirar isso, para ficar padrão

Não conheço nenhuma propriedade da ListView que faça isso. Portanto a saída seria interceptar a mensagem enviada para o controle ao redimensionar uma coluna (pelo método WndProc). Vou tentar isso, mas não garanto sucesso (nunca fiz isso antes).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Com algumas pesquisas na Net, consegui montar a seguinte classe:

    Public Class MyListView
        Inherits ListView

        Private Const WM_NOTIFY = &H4E
        Private Const HDN_FIRST = -300&
        Private Const HDN_BEGINTRACK = (HDN_FIRST - 26)

        <StructLayout(LayoutKind.Sequential)> _
        Private Structure NMHDR
            Public hWndFrom As Int32
            Public idFrom As Int32
            Public code As Int32
        End Structure

        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            Dim foi As Boolean = False

            If m.Msg = WM_NOTIFY Then
                Dim nm As NMHDR = CType(m.GetLParam(GetType(NMHDR)), NMHDR)
                If nm.code = HDN_BEGINTRACK Then
                    m.Result = New IntPtr(1)
                    foi = True
                End If
            End If

            If Not foi Then
                MyBase.WndProc(m)
            End If
        End Sub
    End Class

Basta ir na região "Windows Form Designer generated code" e trocar todos os System.Windows.Forms.ListView por MyListView.

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara como eu falei, usei e funcionou, mas estou tentando enteder essa classe que você criou mas não estou conseguindo! você poderia me explicar essa classe que você criou! Se não for pedir muito um passo à passo.

É que eu não quero apenas pegar o código e usar quero entender ele, para usar melhor

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Cara como eu falei, usei e funcionou, mas estou tentando enteder essa classe que você criou mas não estou conseguindo! você poderia me explicar essa classe que você criou! Se não for pedir muito um passo à passo.

É que eu não quero apenas pegar o código e usar quero entender ele, para usar melhor

Não sei se você é familiarizado com a programação Windows, mas todo o controle e ativação de eventos de uma janela ("janela" aqui é um termo bem amplo, abrangendo também botões, caixas de texto, listviews, datagrids, etc.) é feito através de mensagens. Estas mensagens são valores numéricos que representam o que a janela deve fazer (ou simplesmente detectar). O que a rotina WncProc nos permite é interceptar estas mensagens e decidir se elas devem ou não ser executadas (ou até mesmo alterar seus parâmetros). Certas mensagens podem ser utilizadas em diversos casos diferentes. Esse é justamente o caso da mensagem WM_NOTIFY que detectamos na rotina WndProc. As mensagens podem ter parâmetros que são informações úteis para a execução da mesma. Ao redimensionar uma coluna da ListView é enviada uma mensagem WM_NOTIFY com um parâmetro que é uma estrutura NMHDR. Nesta estrutura, também segue uma informação importante que está na propriedade Code. Se esta propriedade for igual a HDN_BEGINTRACK é porque o usuário está começando a tentar alterar o tamanho da coluna. Neste caso, atribui-se o valor 1 à propriedade Result, indicando assim que a alteração foi concluída e também ignora-se a execução desta mensagem ao não chamar a rotina WndProc da classe base.

Como cada controle pode ter mensagens específicas, pode ser que isso só sirva apenas para a ListView.

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