Xceed DataGrid for WPF v7.2 Documentation
Binding to an IQueryable data source

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.

XAML
Copy Code
<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>

The following code provides the code-behind implementation of the CommitMode, CreatingNewItem, CommittingNewItem, CancelingNewItem, CommitItems, and RemovingItem events. 

VB.NET
Copy Code
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
C#
Copy Code
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;

 }

}