Как я могу определить, какой столбец какой строки был дважды щелкнут в XCeed Datagrid?

У меня есть XCeed Datagrid, который заполняется из DataTable. Когда пользователь дважды щелкает ячейку, я хочу определить, какой столбец из какой строки был выбран. Как я могу это сделать?


person Dabblernl    schedule 18.07.2014    source источник
comment
Пожалуйста, прочтите Как задавать вопросы, прежде чем публиковать вопросы в StackOverflow.   -  person Federico Berasategui    schedule 19.07.2014


Ответы (2)


Ну, похоже, задавать вопрос лаконично нынче наказывают, не вижу смысла вообще приводить какой-то код.

Решение действительно (смехотворно) сложное, позор авторам WPF.

Решение для стандартного WPF DataGrid можно найти здесь.

Я переработал это решение для XCeed DataGridControl (в VB)

Public Class MyXAMLWindow

    Private Sub grdResults_MouseDoubleClick(sender As Object, e As MouseButtonEventArgs)
        'Cast the sender parameter to the XCeed DataGridControl'
        Dim dg As Xceed.Wpf.DataGrid.DataGridControl = sender

        'Extract the cell information to a custom CellInfo structure.'
        Dim info = GetCellInfo(e.OriginalSource, dg.SelectedIndex)

        'Pass the cellinfo to the ViewModel'
        dg.DataContext.SelectedInfo = info
    End Sub

    ''' <summary>
    ''' Contructs a <see cref="CellInfo(Of String)">cellinfo</see> structure from the cell that was clicked.
    ''' </summary>
    ''' <param name="originalSource">The value of the OriginalSource property of the MouseButtonEventArgs.</param>
    ''' <param name="rowIndex">The index of the row on which was clicked.</param>
    ''' <returns><see cref="CellInfo(Of string)">cellinfo</see> object.</returns>
    ''' <remarks>This function uses the OriginalSource property of the MouseButtonEventArgs as a starting point.</remarks>'
    Private Function GetCellInfo(originalSource As Object, rowIndex As Integer) As CellInfo(Of String)
        Dim dep As DependencyObject = originalSource

        Dim cellInfo = New CellInfo(Of String)

        'Find the DataCell that is associated with the original source.'
        While (dep IsNot Nothing) AndAlso Not (TypeOf dep Is DataCell)
            dep = VisualTreeHelper.GetParent(dep)
        End While

        If dep Is Nothing Then
            Return New CellInfo(Of String) With {.ColumnIndex = -1, .RowIndex = -1, .Value = String.Empty}
        End If

        If TypeOf dep Is DataCell Then
            Dim cell As DataCell = TryCast(dep, DataCell)

            cellInfo.ColumnIndex = cell.ParentColumn.Index
            cellInfo.RowIndex = rowIndex
            cellInfo.Value = cell.Content

        End If

        Return cellInfo
    End Function
End Class

'A custom Structure to hold the data of the selected Cell.'
Public Structure CellInfo(Of TValue)
    Public RowIndex As Integer
    Public ColumnIndex As Integer
    Public Value As TValue
End Structure
person Dabblernl    schedule 19.07.2014

Сначала вы хотите обрабатывать двойные щелчки по цели DataCell. Чтобы сделать это в коде за файлом, вы можете написать

    EventManager.RegisterClassHandler(
        typeof(DataCell),
        DataCell.MouseDoubleClickEvent,
        new MouseButtonEventHandler(OnDataCellMouseDoubleClick));

Далее идет метод-обработчик:

private void OnDataCellMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var clickedCell = sender as DataCell;
    var row = clickedCell.ParentRow;
    var rowNum = row.TabIndex;
    var column = clickedCell.ParentColumn;
    var columnNum = column.Index;
}
person cantcodethis    schedule 30.07.2014