Retrieving a DataRow from a Data Item
The following example demonstrates how to retrieve a DataRow (container) for a data item using the GetContainerFromItem method. It is important to remember that data rows are virtualized; therefore, references to them or their cells should never be kept.
- C#
- VB.NET
public Window1()
{
InitializeComponent();
DataGridControl grid = new DataGridControl();
DataGridCollectionView view = new DataGridCollectionView( App.Orders.DefaultView );
grid.ItemsSource = view;
// Subscribe to the PropertyChanged event to know when the CurrentItem property changes.
grid.PropertyChanged +=
new System.ComponentModel.PropertyChangedEventHandler( grid_PropertyChanged );
this.Content = grid;
}
void grid_PropertyChanged( object sender, System.ComponentModel.PropertyChangedEventArgs e )
{
if( e.PropertyName == "CurrentItem" )
{
// Retrieve the data-row container for the current item. Can be null if the data item
// is not in the viewport.
DataGridControl grid = sender as DataGridControl;
Xceed.Wpf.DataGrid.DataRow row = grid.GetContainerFromItem( grid.CurrentItem ) as Xceed.Wpf.DataGrid.DataRow;
// Change the background of the data row to pink. Data rows are recycled once they
// exit the viewport; therefore, any modifications made to a data row will
// be discarded once it is no longer in the viewport.
row.Background = Brushes.Pink;
}
}
Public Sub New()
InitializeComponent()
Dim grid As New DataGridControl()
Dim view As New DataGridCollectionView( App.Orders.DefaultView )
grid.ItemsSource = view
' Subscribe to the PropertyChanged event to know when the CurrentItem property changes.
AddHandler grid.PropertyChanged, AddressOf grid_PropertyChanged
Me.Content = grid
End Sub
Private Sub grid_PropertyChanged( ByVal sender As Object, _
ByVal e As System.ComponentModel.PropertyChangedEventArgs )
If e.PropertyName = "CurrentItem" Then
' Retrieve the data-row container for the current item. Can be Nothing if the data item
' is not in the viewport.
Dim grid As DataGridControl = CType( sender, DataGridControl )
Dim row As Xceed.Wpf.DataGrid.DataRow = TryCast( grid.GetContainerFromItem( grid.CurrentItem ), Xceed.Wpf.DataGrid.DataRow )
' Change the background of the data row to pink. Data rows are recycled once they
' exit the viewport; therefore, any modifications made to a data row will
' be discarded once it is no longer in the viewport.
row.Background = Brushes.Pink
End If
End Sub