DataGridVirtualizingQueryableCollectionViewSource Class
The following example demonstrates how to bind to a data source that implements IQueryable (LINQ DataContext) and allow items to be edited, deleted, inserted, and refreshed.The following code provides the code-behind implementation of the CommitMode, CreatingNewItem, CommittingNewItem, CancelingNewItem, CommitItems, and RemovingItem events. The following code provides the code-behind implementation of the CommitMode, CreatingNewItem, CommittingNewItem, CancelingNewItem, CommitItems, and RemovingItem events.
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">
<Grid.Resources>
<xcdg:DataGridVirtualizingQueryableCollectionViewSource x:Key="cvs_queryableSource"
QueryableSource="{Binding Path=QueryableSource}"
CommitMode="EditCommitted"
CreatingNewItem="DataGridVirtualizingQueryableCollectionViewSource_CreatingNewItem"
CommittingNewItem="DataGridVirtualizingQueryableCollectionViewSource_CommittingNewItem"
CancelingNewItem="DataGridVirtualizingQueryableCollectionViewSource_CancelingNewItem"
CommitItems="DataGridVirtualizingQueryableCollectionViewSource_CommitItems"
RemovingItem="DataGridVirtualizingQueryableCollectionViewSource_RemovingItem" />
</Grid.Resources>
<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource cvs_queryableSource}}"
ItemScrollingBehavior="Deferred"
MaxGroupLevels="2"
MaxSortLevels="2"
IsDeleteCommandEnabled="True"
IsRefreshCommandEnabled="True">
<xcdg:DataGridControl.Resources>
<Style TargetType="{x:Type xcdg:Row}"
x:Key="RowHeightStyle">
<Setter Property="Height"
Value="27" />
</Style>
<Style TargetType="{x:Type xcdg:DataRow}"
BasedOn="{StaticResource RowHeightStyle}" />
<Style TargetType="{x:Type xcdg:InsertionRow}"
BasedOn="{StaticResource RowHeightStyle}" />
</xcdg:DataGridControl.Resources>
<xcdg:DataGridControl.View>
<xcdg:TableView>
<xcdg:TableView.FixedHeaders>
<DataTemplate>
<xcdg:InsertionRow />
</DataTemplate>
</xcdg:TableView.FixedHeaders>
</xcdg:TableView>
</xcdg:DataGridControl.View>
<xcdg:DataGridControl.Columns>
<xcdg:Column FieldName="ProductID"
AllowSort="False"
AllowGroup="False" />
</xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>
</Grid>
Public Partial Class Window1
Inherits Window
Public Sub New
Me.DataContext = Me
InitializeComponent()
End Sub
' QUERYABLE SOURCE
Public Readonly Property QueryableSource As IQueryable
Get
If m_queryable Is Nothing Then
m_northwind = New NorthwindDataContext()
m_queryable = m_northwind.Products
End If
Return m_queryable
End Get
End Property
Private m_northwind As NorthwindDataContext
Private m_queryable As IQueryable
' QUERYABLE INSERTION SUPPORT
Private Sub DataGridVirtualizingQueryableCollectionViewSource_CreatingNewItem( sender As Object, e As DataGridCreatingNewItemEventArgs )
Dim productToInsert As New Product()
e.NewItem = productToInsert
m_northwind.Products.InsertOnSubmit( productToInsert )
e.Handled = True
End Sub
Private Sub DataGridVirtualizingQueryableCollectionViewSource_CommittingNewItem( sender As Object, e As DataGridCommittingNewItemEventArgs )
Try
m_northwind.SubmitChanges()
Catch e As Exception
e.Cancel = True
End Try
e.Handled = True
End Sub
Private Sub DataGridVirtualizingQueryableCollectionViewSource_CancelingNewItem( sender As Object, e As DataGridItemHandledEventArgs )
m_northwind.GetChangeSet().Inserts.Clear()
e.Handled = True
End Sub
' QUERYABLE EDIT SUPPORT
Private Sub DataGridVirtualizingQueryableCollectionViewSource_CommitItems( sender As Object, e As CommitItemsEventArgs )
Try
m_northwind.SubmitChanges()
Catch e As Exception
m_northwind.GetChangeSet().Updates.Clear()
Finally
e.AsyncCommitInfo.EndCommit()
End Try
End Sub
' QUERYABLE DELETE SUPPORT
Private Sub DataGridVirtualizingQueryableCollectionViewSource_RemovingItem( sender As Object, e As DataGridRemovingItemEventArgs )
Try
m_northwind.Products.DeleteOnSubmit( TryCast( e.Item, Product ) )
m_northwind.SubmitChanges()
Catch e As Exception
m_northwind.GetChangeSet().Deletes.Clear()
e.Cancel = True
End Try
e.Handled = True
End Sub
End Class
public partial class Window1 : Window
{
public Window1()
{
this.DataContext = this;
InitializeComponent();
}
// QUERYABLE SOURCE
public IQueryable QueryableSource
{
get
{
if( m_queryable == null )
{
m_northwind = new NorthwindDataContext();
m_queryable = m_northwind.Products;
}
return m_queryable;
}
}
private NorthwindDataContext m_northwind;
private IQueryable m_queryable;
// QUERYABLE INSERTION SUPPORT
private void DataGridVirtualizingQueryableCollectionViewSource_CreatingNewItem( object sender, DataGridCreatingNewItemEventArgs e )
{
Product productToInsert = new Product();
e.NewItem = productToInsert;
m_northwind.Products.InsertOnSubmit( productToInsert );
e.Handled = true;
}
private void DataGridVirtualizingQueryableCollectionViewSource_CommittingNewItem( object sender, DataGridCommittingNewItemEventArgs e )
{
try
{
m_northwind.SubmitChanges();
}
catch
{
e.Cancel = true;
}
e.Handled = true;
}
private void DataGridVirtualizingQueryableCollectionViewSource_CancelingNewItem( object sender, DataGridItemHandledEventArgs e )
{
m_northwind.GetChangeSet().Inserts.Clear();
e.Handled = true;
}
// QUERYABLE EDIT SUPPORT
private void DataGridVirtualizingQueryableCollectionViewSource_CommitItems( object sender, CommitItemsEventArgs e )
{
try
{
m_northwind.SubmitChanges();
}
catch
{
m_northwind.GetChangeSet().Updates.Clear();
}
finally
{
e.AsyncCommitInfo.EndCommit();
}
}
// QUERYABLE DELETE SUPPORT
private void DataGridVirtualizingQueryableCollectionViewSource_RemovingItem( object sender, DataGridRemovingItemEventArgs e )
{
try
{
m_northwind.Products.DeleteOnSubmit( e.Item as Product );
m_northwind.SubmitChanges();
}
catch
{
m_northwind.GetChangeSet().Deletes.Clear();
e.Cancel = true;
}
e.Handled = true;
}
}
.NET: net5.0, net5.0-windows, net6.0, net6.0-macos, net6.0-windows, net7.0, net7.0-macos, net7.0-windows, net8.0, net8.0-browser, net8.0-macos, net8.0-windows, net9.0, net9.0-browser, net9.0-macos, net9.0-windows, net10.0, net10.0-browser, net10.0-macos, net10.0-windows.
.NET Framework: net40, net403, net45, net451, net452, net46, net461, net462, net463, net47, net471, net472, net48, net481.