Array
(
)

Mouse e DataGridView

Hal9000
   - 28 set 2008

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.

Codename.v
   - 09 out 2008

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.
Obs.: Antes você precisa mudar a propriedade MultiSelect do seu controle DataGridView para false

#Código

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!

Hal9000
   - 09 out 2008

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:

#Código


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



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

tks a lot...

Codename.v
   - 10 out 2008

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

#Código

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!

Hal9000
   - 10 out 2008

Perfeito...

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

No final o código ficou assim:

#Código

       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.

Codename.v
   - 11 out 2008

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