Сортировка данных (все еще) не работает с Entity Framework 4.0 - PullRequest
2 голосов
/ 04 ноября 2011

У меня проблемы с приложением, которое я пишу в VS2010.Мне нужно отобразить данные, привязанные к данным, на сетке данных и позволить пользователю сортировать их содержимое.

Моя ситуация такова:

  1. Я создал очень простую базу данных SQLс 1 таблицей под названием «Вопрос».Таблица имеет 2 столбца: «id_Question» и «QuestionText».

  2. Я создал модель Entity из этой базы данных.

  3. В разделе «Данные»Источники ", я перетащил объект" Вопрос "в виде таблицы данных в мое окно WPF.При запуске Datagrid обычно заполняется тем, что находится в базе данных.Отлично.

  4. Я установил свойства "CanUserSortColumns" и "CanUserSort" столбцов DataGrid и DataGrid в значение True.Когда щелкается заголовок столбца, ничего не происходит, ничего не сортируется.

Вот фрагмент кода XAML:

  <DataGrid AutoGenerateColumns="False" 
              EnableRowVirtualization="True" Height="200" 
              HorizontalAlignment="Left" ItemsSource="{Binding}" 
              Margin="871,126,0,0" Name="questionsDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" 
              VerticalAlignment="Top" Width="400"
              CanUserSortColumns="True">
        <DataGrid.Columns>
            <DataGridTemplateColumn x:Name="id_QuestionColumn1" Header="id Question" Width="SizeToHeader">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Content="{Binding Path=id_Question}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn x:Name="questionTextColumn1" 
                                Binding="{Binding Path=QuestionText}" Header="Question Text" Width="300"
                                CanUserSort="True"/>
        </DataGrid.Columns>
    </DataGrid>

Я прочитал следующее среди многих других связанных статей/ вопросы по переполнению стека и другим сайтам:

Каждый из них предоставил полезные идеи, но я не смог заставить его работать длямоя проблема.Что мне нужно написать в коде файла, чтобы это работало правильно?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Ваш шаблонный столбец не сортируется или ЛЮБОЙ столбец не сортируется?

Если проблема связана со столбцом шаблона, то n ...

Установить

 DataGridTemplateColumn.SortMemberPath="SomeSortableProperty"
 DataGridTemplateColumn.SortDirection="Ascending"
0 голосов
/ 31 марта 2013

Я столкнулся с той же проблемой и потратил много времени на поиск. В конце концов, решение было ОЧЕНЬ простым:

<Window.Resources>

  <CollectionViewSource x:Key="milestonesViewSource" CollectionViewType="ListCollectionView"/>

</Window.Resources>



<Grid DataContext="{StaticResource milestonesViewSource}">

  <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected">

     <DataGrid.Columns>

       <DataGridTextColumn x:Name="milestoneIdColumn" Binding="{Binding Path=MilestoneId}" Header="Milestone Id"/>

     </DataGrid.Columns>

</DataGrid>

</Grid>

Проблема в CollectionViewSource, который по умолчанию создает BindingListCollectionView, который реализует IBindingList, который не поддерживает сортировку!

Но CollectionViewSource имеет свойство CollectionViewType, которое позволяет изменить тип представления на ListCollectionView, что позволяет сортировать. Это все.

Я только что исправил это сегодня в своем коде, так что я пока не знаю, каковы побочные эффекты. В настоящее время, кажется, все работает нормально.

...