2016-12-30 5 views
0

Avec DataGridView de Winforms, vous pouvez utiliser HitTest pour déterminer l'index des colonnes et des lignes de la souris (et d'autres événements).Existe-t-il un test d'abaissement de la souris de la grille de données pour obtenir l'index des lignes et des colonnes du clic?

Dim hti As DataGridView.HitTestInfo = sender.HitTest(e.X, e.Y) 

Y at-il quelque chose de similaire avec DataGrid de WPF? J'ai besoin d'obtenir les index de ligne et de colonne pour l'événement MouseLeftButtonDown.

Répondre

0

C'est un peu plus compliqué que cela, mais les liens suivants devraient être utiles pour obtenir l'index de la ligne et de la colonne.

DataGrid WPF - détection de la colonne, la cellule et la ligne qui a été cliqué:http://blog.scottlogic.com/2008/12/02/wpf-datagrid-detecting-clicked-cell-and-row.html

WPF DataGrid - get row number which mouse cursor is on

Vous devrez utiliser la classe VisualTreeHelper pour parcourir les éléments visuels qui composent le DataGrid comme expliqué ci-dessus.

+0

Malheureusement j'ai essayé environ 3 différents C à VB convertisseurs et non ont été en mesure de convertir ce code à VB – user1500403

+0

J'ai pu utiliser cet article, merci. – user1500403

-1

Pour ceux qui peuvent vouloir éviter ma recherche est ici le code totale j'ai fini par déconcertant ensemble qui est en mesure de livrer:

  1. index de la ligne actuelle
  2. index de la colonne actuelle
  3. tête de colonne actuelle Et
  4. est capable d'exposer la valeur/s de colonnes sur la ligne.

    Le code passe en cas MouseLeftButtonUp et DGrid1 est le nom de la grille

    Dim currentRowIndex As Integer = -1 
    Dim CurrentColumnIndex As Integer = -1 
    Dim CurrentColumnHeader As String = "" 
    Dim Myrow As DataRowView = Nothing 
    Dim dep As DependencyObject = DirectCast(e.OriginalSource, DependencyObject) 
    While dep IsNot Nothing And Not TypeOf dep Is DataGridCell And Not TypeOf dep Is Primitives.DataGridColumnHeader 
        dep = VisualTreeHelper.GetParent(dep) 
        If dep IsNot Nothing Then 
         If TypeOf dep Is DataGridCell Then 
          Dim cell As DataGridCell = DirectCast(dep, DataGridCell) 
          Dim col As DataGridBoundColumn = DirectCast(cell.Column, DataGridBoundColumn) 
          Myrow = DGrid1.SelectedItem 
          CurrentColumnHeader = col.Header.ToString 
          CurrentColumnIndex = col.DisplayIndex 
          currentRowIndex = DGrid1.Items.IndexOf(DGrid1.CurrentItem) 
          Exit While 
         End If 
        End If 
    End While 
    If currentRowIndex = -1 OrElse CurrentColumnIndex = -1 OrElse CurrentColumnHeader = "" OrElse Myrow Is Nothing Then Exit Sub 
    
        'code to consume the variables from here 
    
    Dim strinwar As String = Myrow.Item("header name or index").ToString()