In addition to the selection of cells, columns, and rows, the grid supports marking a cell as active. Please note this refers to cells only, not columns or rows. Marking a cell as active is nearly the same thing as selecting it. Usually when you select a cell, it becomes active.
Additionally, a cell can be marked as active through the keyboard. If a cell is active and you press the up key, the cell on top of it will become active. You can easily implement keyboard navigation logic using this feature of xamPivotGrid™ by using ActiveCellChanging and ActiveCellChanged.
The following code shows how to apply a different style to the active cell.
In C#:
this.pivotGrid.ActiveCellChanged += (sender, e) =>
{
//set inactive cell styles
foreach (PivotDataRow row in this.pivotGrid.DataRows)
{
foreach (PivotCell cell in row.Cells)
{
cell.Style =
this.Resources["InactiveCellStyle"] as Style;
}
}
//set active cell styles
(sender as xamPivotGrid).ActiveCell.Style =
this.Resources["ActiveCellStyle"] as Style;
};
In Visual Basic:
AddHandler Me.pivotGrid.ActiveCellChanged, AddressOf ActiveCellChanged
...
Private Sub ActiveCellChanged( _
ByVal sender As Object, _
ByVal e As EventArgs)
'set inactive cell styles
For Each row As PivotDataRow In Me.pivotGrid.DataRows
For Each cell As PivotCell In row.Cells
cell.Style = _
TryCast(Me.Resources("InactiveCellStyle"), Style)
Next
Next
'set active cell styles
TryCast(sender, xamPivotGrid).ActiveCell.Style = _
TryCast(Me.Resources("ActiveCellStyle"), Style)
End Sub
And the following shows how to deny activation of cells with values greater than 2000.
In C#:
this.pivotGrid.ActiveCellChanging += (sender, e) =>
{
var doubleVal = Convert.ToDouble(
(e.NewActiveCell.Data as ICell).Value);
if (doubleVal > 2000)
e.Cancel = true;
};
In Visual Basic:
AddHandler Me.pivotGrid.ActiveCellChanging, _
AddressOf ActiveCellChanging
...
Private Sub ActiveCellChanging( _
ByVal sender As Object, _
ByVal e As PivotActiveCellChangingEventArgs)
Dim doubleVal = Convert.ToDouble( _
TryCast(e.NewActiveCell.Data, ICell).Value)
If doubleVal > 2000 Then
e.Cancel = True
End If
End Sub
End-User interaction with data is of key importance to any data analysis application. xamPivotGrid™ provides great features regarding end-user customization. Selecting sells, rows, columns and responding to click actions are among the tools that provide this flexibility. This topic explains how to use these features.
Let’s start off with the settings. xamPivotGrid allows you to customize these settings through the SelectionSettings property. You can modify the selection type of the cells, columns and rows. The cell click action can be changed also. The following snippet shows you how to do this.
In C#:
this.pivotGrid.SelectionSettings.CellSelectionAction =
PivotCellSelectionAction.SelectCell;
this.pivotGrid.SelectionSettings.CellSelection =
PivotSelectionType.Multiple;
this.pivotGrid.SelectionSettings.ColumnSelection =
PivotSelectionType.Single;
this.pivotGrid.SelectionSettings.RowSelection =
PivotSelectionType.None;
In Visual Basic:
Me.pivotGrid.SelectionSettings.CellSelectionAction = _
PivotCellSelectionAction.SelectCell
Me.pivotGrid.SelectionSettings.CellSelection = _
PivotSelectionType.Multiple
Me.pivotGrid.SelectionSettings.ColumnSelection = _
PivotSelectionType.[Single]
Me.pivotGrid.SelectionSettings.RowSelection = _
PivotSelectionType.None
At runtime you can get the selected cells, rows or column from three collections located in the SelectionSettings object. The following code snippet shows you how to do this:
In C#:
var cells = this.pivotGrid.SelectionSettings.SelectedCells;
var columns = this.pivotGrid.SelectionSettings.SelectedColumns;
var rows = this.pivotGrid.SelectionSettings.SelectedRows;
In Visual Basic:
Dim cells = Me.pivotGrid.SelectionSettings.SelectedCells
Dim columns = Me.pivotGrid.SelectionSettings.SelectedColumns
Dim rows = Me.pivotGrid.SelectionSettings.SelectedRows
Interaction can be based on the three events that mark the change of the collections above: SelectedCellsCollectionChanged, SelectedRowsCollectionChanged and SelectedColumnsCollectionChanged. You can detect cell click actions through the CellClicked and CellDoubleClicked events.
The following code selects all cells in the row and selects all cells of the column of the cell that is clicked. It changes the style of the cells in the column, the style of the cells in the row, the style of the clicked cell and resets all other cells to a neutral style. If a cell is double clicked a message with its value is displayed.
In C#:
this.pivotGrid.SelectionSettings.CellSelectionAction = PivotCellSelectionAction.SelectCell;
this.pivotGrid.SelectionSettings.ColumnSelection = PivotSelectionType.Single;
this.pivotGrid.SelectionSettings.RowSelection = PivotSelectionType.Single;
this.pivotGrid.CellClicked += (sender1, e1) =>
{
this.pivotGrid.SelectionSettings.SelectedColumns.Add( e1.Cell.DataColumn);
this.pivotGrid.SelectionSettings.SelectedRows.Add( e1.Cell.DataRow);
foreach (PivotDataRow row in this.pivotGrid.DataRows)
{
if (row != e1.Cell.DataRow)
{
foreach (PivotCell cell in row.Cells)
{ var selectionSettings = this.pivotGrid.SelectionSettings;
if (selectionSettings.SelectedColumns.Contains( cell.Column as DataColumn))
{
cell.Style = this.Resources["CellOnSelectedColumnStyle"] as Style;
}
else
{
cell.Style = this.Resources["NotSelectedCellStyle"] as Style;
}
}
}
else
{
foreach (PivotCell cell in row.Cells)
{
if (this.pivotGrid.SelectionSettings.SelectedRows.Contains(cell.Row as DataRow))
{
cell.Style = this.Resources["CellClickedStyle"] as Style;
}
else
{
cell.Style = this.Resources["CellOnSelectedRowStyle"] as Style;
}
}
}
}
};
this.pivotGrid.CellDoubleClicked += (sender2, e2) =>
{
MessageBox.Show(e2.Cell.Data.ToString());
};
In Visual Basic:
Me.pivotGrid.SelectionSettings.CellSelectionAction = _
PivotCellSelectionAction.SelectCell
Me.pivotGrid.SelectionSettings.ColumnSelection = _
PivotSelectionType.[Single]
Me.pivotGrid.SelectionSettings.RowSelection = _
PivotSelectionType.[Single]
AddHandler Me.pivotGrid.CellClicked, AddressOf CellClicked
AddHandler Me.pivotGrid.CellDoubleClicked, AddressOf CellDoubleClicked
...
Private Sub CellClicked( _
ByVal sender As Object,
ByVal e As PivotCellClickedEventArgs)
Me.pivotGrid.SelectionSettings.SelectedColumns.Add( _
e.Cell.DataColumn)
Me.pivotGrid.SelectionSettings.SelectedRows.Add( _
e.Cell.DataRow)
For Each row As PivotDataRow In Me.pivotGrid.DataRows
If row <> e.Cell.DataRow Then
For Each cell As PivotCell In row.Cells
Dim selectionSettings = _
Me.pivotGrid.SelectionSettings
If selectionSettings.SelectedColumns.Contains( _
TryCast(cell.Column, DataColumn)) Then
cell.Style = TryCast( _
Me.Resources("CellOnSelectedColumnStyle"), _
Style)
Else
cell.Style = TryCast( _
Me.Resources("NotSelectedCellStyle"), _
Style)
End If
Next
Else
For Each cell As PivotCell In row.Cells
If Me.pivotGrid.SelectionSettings.SelectedRows.Contains( _
TryCast(cell.Row, DataRow)) Then
cell.Style = TryCast( _
Me.Resources("CellClickedStyle"), _
Style)
Else
cell.Style = TryCast( _
Me.Resources("CellOnSelectedRowStyle"), _
Style)
End If
Next
End If
Next
End Sub
Private Sub CellDoubleClicked( _
ByVal sender As Object,
ByVal e As PivotCellClickedEventArgs)
MessageBox.Show(e.Cell.Data.ToString())
End Sub
Related Topics