2013-02-26 3 views
1

Xceed (http://wpftoolkit.codeplex.com/)에서 제공하는 Extended WPF Toolkit Community Edition에서 사용할 수있는 우수한 DataGrid를 사용하려고합니다. 간단한 DataGridControl 개체에 보고서의 결과를 표시하는 응용 프로그램이 있습니다. 사용자는 보고서 목록에서 보고서를 선택할 수 있으며 보고서에 연결된 DataTable을 사용하여 데이터 표가 동적으로 업데이트됩니다. 각 보고서 데이터 테이블의 열은 이름과 수량이 다를 수 있습니다. WPF의 기본 컨트롤을 사용하면 일반 MVVM 데이터 바인딩을 사용하여 정상적으로 작동합니다. Xceed에서 DataGridControl, 을 사용하면 데이터를 정렬하거나 그룹화하는 데 사용 된 경우를 제외하면이 방법을 사용할 수도 있습니다.Xceed DataGridControl이 DataTable에 바인딩되어 있고 정렬 된 열이 더 이상 존재하지 않으면 예외가 발생합니다.

열이 정렬되거나 그룹화되고 DataTable이 열을 포함하지 않는 것으로 업데이트되면 DataGridControl에서 정렬중인 열이 없다는 ArgumentException을 throw합니다. 여기에 예제 예외는 다음과 같습니다

System.ArgumentException이
메시지 = 'SAP_MATERIAL_NUMBER' '유형이라는 속성이 없습니다'처리되지 않은, 그래서 데이터를 수집을 정렬 할 수 없습니다.
자료 = PresentationFramework 스택 트레이스 : System.Windows.Data.BindingListCollectionView.ConvertSortDescriptionCollection에서 System.Windows.Data.BindingListCollectionView.RefreshOverride (AT (SortDescriptionCollection 종류) ) System.Windows.Data.CollectionView.Refresh에서 () System.Windows.Controls.ItemCollection.SetCollectionView에서 System.Windows.Data.CollectionView.DeferHelper.Dispose()에서 System.Windows.Data.CollectionView.EndDefer() (CollectionView 뷰)에서 System.Windows.Controls에서 .ItemCollection.SetItemsSource (IEnumerable 값) at System.Windows.Controls.ItemsCo ntrol.OnItemsSourceChanged (DependencyObject에 D, DependencyPropertyChangedEventArgs 전자) ...

여기 제어 정의하고 결합 내 현재 XAML의

:

<xcdg:DataGridControl 
    Grid.Row="2" 
    AutoCreateColumns="True" 
    AutoRemoveColumnsAndDetailConfigurations="True" 
    ReadOnly="True" 
    x:Name="xceedReportResult" 
    ItemsSource="{Binding SelectedReport.Report.Result}" 
    FontSize="11"> 

    <xcdg:DataGridControl.View> 
     <xcdg:TableflowView 
      ShowRowSelectorPane="False" 
      IsAnimatedColumnReorderingEnabled="True" 
      HorizontalGridLineBrush="LightGray" 
      VerticalGridLineBrush="LightGray" 
      IsAlternatingRowStyleEnabled="True" 
      ShowScrollTip="False"> 

      <xcdg:TableflowView.Theme> 
       <xcdg:ClassicSystemColorTheme /> 
      </xcdg:TableflowView.Theme> 
     </xcdg:TableflowView> 
    </xcdg:DataGridControl.View> 

</xcdg:DataGridControl> 

는 Xceed 포럼에서 몇 가지 조언 다음 ... I 'SortDescriptions 또는 GroupDescriptions을 지우려는 목적으로 새로운 보고서를 선택했지만 다음 코드를 실행하려고 시도했지만 올바르게 작동하지 않습니다.

ICollectionView source = xceedReportResult.ItemsSource as DataGridCollectionView; 

if (source != null) 
{ 
    if (source.SortDescriptions != null) 
    { 
     source.SortDescriptions.Clear(); 
    } 

    if (source.GroupDescriptions != null) 
    { 
     source.GroupDescriptions.Clear(); 
    } 
} 

이 방법으로이 데이터 표를 사용한 사람이 있습니까?이 문제를 해결할 방법을 찾았습니까?

답변

1

나는 예외를 던지지 않고도이 문제를 해결할 수 있다고 생각한다.

<xcdg:DataGridControl 
    Grid.Row="2" 
    AutoCreateColumns="True" 
    AutoRemoveColumnsAndDetailConfigurations="True" 
    ReadOnly="True" 
    x:Name="xceedReportResult" 
    ItemsSource="{Binding Source={StaticResource reportResultView}}" 
    FontSize="11"> 

    <xcdg:DataGridControl.View> 
     <xcdg:TableflowView 
      ShowRowSelectorPane="False" 
      IsAnimatedColumnReorderingEnabled="True" 
      HorizontalGridLineBrush="LightGray" 
      VerticalGridLineBrush="LightGray" 
      IsAlternatingRowStyleEnabled="True" 
      ShowScrollTip="False"> 

      <xcdg:TableflowView.Theme> 
       <xcdg:ClassicSystemColorTheme /> 
      </xcdg:TableflowView.Theme> 
     </xcdg:TableflowView> 
    </xcdg:DataGridControl.View> 

</xcdg:DataGridControl> 

을 나는 일단 : DataTable에 직접 결합하는 대신 ItemsSource로 사용하는 내 DataGridControl를 업데이트

<Control.Resources> 
    <xcdg:DataGridCollectionViewSource 
     x:Key="reportResultView" 
     x:Name="reportResultView" 
     Source="{Binding SelectedReport.Report.Result.DefaultView}" 
     AutoCreateItemProperties="True"/> 
</Control.Resources> 

다음 : 내 그리드에 대한 명시 적 DataGridCollectionViewSource 선언을 사용하는 XAML 코드에 의해 수정 정렬되거나 그룹화 된 열 (들)이 존재하지 않고 데이터 격자가 예상대로 업데이트되는 경우 더 이상 예외를 throw하지 않습니다.

관련 문제