엔티티 프레임 워크를 사용하여 데이터베이스를 쿼리하고 결과를 ICollectionView
에 배치하는 방법이 있습니다. ICollectionView
은 DataGrid
에 대해 ItemsSource
의 역할을합니다. 첫 번째 쿼리에서는 모든 것이 제대로 작동하지만 두 번째 쿼리에서 올바른 SortDescriptions
의 적용에도 불구하고 데이터가 올바르게 정렬되지 않습니다.소스를 변경 한 후 ICollectionView 정렬이 작동하지 않습니다.
다음은 데이터를/쿼리 및 그룹화를 시도 정렬 내 코드입니다 :
CollectionViewSource cvsRS;
private ObservableCollection<productorder> rs;
public ObservableCollection<productorder> RS
{
get { return rs; }
set
{
if (rs != value)
{
rs = value;
OnPropertyChanged("RS");
}
}
}
private ICollectionView rsView;
public ICollectionView RSView
{
get { return rsView; }
set
{
if (rsView != value)
{
rsView = value;
OnPropertyChanged("RSView");
}
}
}
public void QueryDatabase()
{
RS = new ObservableCollection<productorder>(DatabaseEntities.productorders.Where(o => o.month.id == CurrentMonth.id));
if (RS != null)
{
cvsRS.Source = RS;
RSView = cvsRS.View;
RSView.GroupDescriptions.Clear();
RSView.GroupDescriptions.Add(new PropertyGroupDescription("producttype.productcategory.name"));
RSView.GroupDescriptions.Add(new PropertyGroupDescription("producttype.name"));
RSView.SortDescriptions.Clear();
RSView.SortDescriptions.Add(new SortDescription("producttype.productcategory.sortorder", ListSortDirection.Ascending));
RSView.SortDescriptions.Add(new SortDescription("client.name", ListSortDirection.Ascending));
RSView.Refresh();
CurrentRecord = null;
SelectedRecords = null;
}
}
그룹화가 잘 작동하지만 그룹은 분류에 따라 올바른 순서에 있지 않습니다. 가능한 많은 수의 "수정 사항"을 시도했습니다 (예 : CollectionViewSource
에 직접 정렬/그룹 설명 추가, 그룹화 전에 정렬, 정렬/그룹화 중 일부 제거, SortDescriptions
/CollectionViewSource does not re-sort on property change 제외).
아무도 수행되는 쿼리 수에 관계없이 정렬 순서를 유지하는 방법을 알고 있습니까? 나는 그것이 작동할지 모른다면 DataGrid
에 데이터를 표시하는 질의의 다른 방법에 대해 공개적이다.
'ObservableCollection'속성에 새 컬렉션을 제공 할 때 'PropertyChanged'를 발생시키는 Source (바인딩, 바인딩, Binding 클래스의 인스턴스 사용)를 한 번 바인딩하려고합니다. 그런 다음 속성을 변경하여 다시 채 웁니다. 새 컬렉션을 던지거나 이전 컬렉션을 지우고 다시 채 웁니다. 그러나 처음에는'Binding'을 설정하는 것을 제외하고'cvsRS.Source'를 만지지 마십시오. –
잘하면이 구문을 올바르게 해석했다. 나는 이것을 생성자에서 수행했다.'cvsRS = new CollectionViewSource(); cvsRS.Source = 새 바인딩 ("RS"); RSView = cvsRS.View; 하지만 'System.Windows.Data.Binding'속성 'Source'의 값이 올바르지 않습니다. –
빠른 테스트를 수행하여 예상 한대로 작동하므로 바인딩을 수행하는 방법의 예를 들어 답글을 게시했습니다. 코멘트에 그것을 붙여 넣는 것은 어쨌든 읽을 수 없을 것입니다. –