Mouse e DataGridView

28/09/2008

0

Olá a todos.
Estou com o seguinte problema:

Tenho um DataGridView e gostaria que a seleção de colunas seguisse o movimento do mouse de modo que a linha em que o cursor do mouse estiver posicionado seja a linha selecionada sempre, sem que seja preciso clicar com o mouse para seleciona-la.

Alguém tem idéia de como conseguir isso?
Estou quebrando a cabeça.


Hal9000

Hal9000

Responder

Posts

09/10/2008

Codename.v

Olá! O controle DataGridView possui um evento chamado CellMouseEnter que ocorre toda vez que o ponteiro do mouse é posicionado sobre uma nova linha.

Segue abaixo o código para fazer a seleção como você deseja.
[b:866b864cd0]Obs.: Antes você precisa mudar a propriedade MultiSelect do seu controle DataGridView para false[/b:866b864cd0]

Private Sub DataGridView1_CellMouseEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseEnter
        If (e.RowIndex <> -1) Then
            DataGridView1.Rows(e.RowIndex).Selected = True
        End If
    End Sub


Abraços!


Responder

09/10/2008

Hal9000

Olá. V.

Funcionou como vc disse, mas ainda não marca a Linha como A linha atual.

Eu explico:

Estou usando um menu no grid um contextmenustrip com as opções de Alteração, inclusão e impressão. então quando eu clico no menu eu recupero a linha do grid selecionada.

Apesar de estar marcada pelo posicionamento do mouse no grid a alinha que me é retornada é sempre a primeira. :(

A linha que eu uso para recuperar a Row Selecionada é a seguinte:



grdConsulta.Rows(grdConsulta.CurrentRow.Index).Cells(0).Value




Vou tentar alguma coisa aqui, mas se tiver alguma solução ´Posta´ ai

tks a lot...


Responder

10/10/2008

Codename.v

Vamos supor que você queira regatar o id do registro que está sendo exibido no DataGridView.

Dim idSelecionado As Integer

Private Sub DataGridView1_CellMouseEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseEnter 
        If (e.RowIndex <> -1) Then 
            DataGridView1.Rows(e.RowIndex).Selected = True
            idSelecionado = Convert.ToInt32(DataGridView1.Rows(e.RowIndex).Cells(0).ToString())
        End If 
    End Sub 


Sendo Cell 0 o campo em que encontra-se o registro de id. Desta forma você sabe qual o item selecionado simplesmente consultando a variável idSelecionado.
Acho que isso deve resolver o problema.

Abraços!


Responder

10/10/2008

Hal9000

Perfeito...

Realmente assim, funcionou. é que eu estava tentando recuperar o código em outra chamada.

No final o código ficou assim:

       If (e.RowIndex <> -1) Then
            grdConsulta.Rows(e.RowIndex).Selected = True
            Id_Chave = CInt(grdConsulta.Rows(e.RowIndex).Cells(0).Value)
        End If


To postando pq se não colocar o ´.value´ no final.. dá pau.

Abrigado pela ajuda V.


Responder

11/10/2008

Codename.v

É... eu coloquei mais ou menos como seria rs! Eu sou mais acostumado com o C# :)
Mas realmente você está certo. Tanto em uma quanto na outra linguagem o ´.Value´ é indispensável.

Fico feliz em ter ajudado. Abraços!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar