【问题标题】:Datagrid Sorting (Still) Not Working with Entity Framework 4.0Datagrid 排序(仍然)不适用于 Entity Framework 4.0
【发布时间】:2011-11-04 05:12:44
【问题描述】:

我在使用 VS2010 编写的应用程序时遇到问题。我需要在 Datagrid 上显示数据绑定数据并允许用户对其内容进行排序。

这是我的情况:

  1. 我构建了一个非常简单的 SQL 数据库,其中包含一个名为“问题”的表。该表有 2 列,“id_Question”和“QuestionText”。

  2. 我从这个数据库创建了一个实体模型。

  3. 在“数据源”下,我已将“问题”实体作为数据网格拖放到我的 WPF 窗口中。运行时,Datagrid 会正常填充数据库中的任何内容。太好了。

  4. 我已将 DataGrid 和 DataGrid 列的“CanUserSortColumns”和“CanUserSort”属性设置为 True。单击列标题时,没有任何反应,也没有排序。

这里是 XAML sn-p:

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

我在 Stack Overflow 和其他网站上阅读了许多其他相关文章/问题中的以下内容:

每个都提供了有用的见解,但我无法让它解决我的问题。我需要在文件后面的代码中编写什么才能使其正常工作?

谢谢

【问题讨论】:

    标签: wpf entity-framework entity-framework-4 wpfdatagrid


    【解决方案1】:

    您的模板列是否未排序或任何列未排序?

    如果模板列有问题,那么...

    设置

     DataGridTemplateColumn.SortMemberPath="SomeSortableProperty"
     DataGridTemplateColumn.SortDirection="Ascending"
    

    【讨论】:

    • 感谢您的快速响应,但上述建议仍然没有成功。没有任何列正在排序。我从需要创建 CollectionViewSource 的其他帖子中收集。我不知道这是否属实,但到目前为止没有任何效果。还有其他想法吗?再次感谢。
    • 哦!那么应该是实体框架问题。是的,collectionview 源代码应该有所帮助。但是你将不得不向它添加排序描述才能排序。
    【解决方案2】:

    我遇到了同样的问题并花了很多时间搜索。最后,解决方案非常简单:

    <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,它允许排序。就这样。

    我今天刚刚在我的代码中修复了它,所以我还不知道有什么副作用。目前,一切似乎都运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多