2016-12-30 4 views
0

С помощью Winforms 'DataGridView можно было бы использовать HitTest для определения индекса столбца и строки мыши вниз (и других событий).Есть ли тест по нажатию мыши по датегригу, чтобы получить индекс строки и столбца клика?

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

Есть ли что-то подобное с WPF DataGrid? Мне нужно получить индексы строк и столбцов для события MouseLeftButtonDown.

ответ

0

Это немного сложнее, но следующие ссылки должны быть полезны при получении индекса строки и столбца.

WPF DataGrid - обнаружение столбца, ячейки и строки, которая была нажата: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

Вы должны будете использовать класс VisualTreeHelper для обхода визуальных элементов, которые составляют DataGrid как объяснено выше.

+0

К сожалению, я попробовал около 3 различного C в VB преобразователи и не смогло преобразовать этот код в VB – user1500403

+0

Я смог использовать эту статью, спасибо. – user1500403

-1

Для тех, кто, возможно, пожелает, чтобы избежать моего поиска здесь общий код, который я в конечном итоге загадочное вместе, что может поставить:

  1. Текущий индекс строки
  2. Текущий индекс столбца
  3. заголовок текущего столбца И
  4. способен выставлять значение/с столбцов в строке.

    Код переходит в MouseLeftButtonUp событие и DGrid1 этого имя сетки

    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()