Xceed Toolkit Plus for WPF v5.0 Documentation
In This Topic
    Binding to an IQueryable data source
    In This Topic

    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;
     }
    }