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