2017-06-21 127 views
0

私のWPFアプリケーションでは、このDataGridでDataGridを使用していますが、 "City"という列名に基づいてデータベースからデータをグループ化する必要があります。私はmvvmアーキテクチャとリストメソッドを使用していません。私はICollectionViewのを使用して、パラメータとしてDataTableオブジェクトを渡され、これが私のC#のコードであるWPF DataGridでデータをグループ化する方法

ICollectionView cv = CollectionViewSource.GetDefaultView(dt); 
       cv.GroupDescriptions.Add(newPropertyGroupDescription("City")); 
       Hotels.ItemsSource = cv; 

そして、これは私のXAMLコードですよ:

<Window.Resources> 
     <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type GroupItem}"> 
         <StackPanel> 
          <TextBlock Text="{Binding City}" Name="grouping" Foreground="Black"></TextBlock> 
          <ItemsPresenter/> 
         </StackPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

<DataGrid Background="Azure" ItemsSource="{Binding Hotels}" CanUserAddRows="False" Name="Hotels" Style="{StaticResource AzureDataGrid}" Margin="0,173,0,0"> 
      <DataGrid.GroupStyle> 
       <GroupStyle ContainerStyle="{StaticResource ResourceKey=GroupHeaderStyle}"> 
        <GroupStyle.Panel>       
         <ItemsPanelTemplate> 
          <DataGridRowsPresenter/> 
         </ItemsPanelTemplate> 
        </GroupStyle.Panel> 
       </GroupStyle> 
      </DataGrid.GroupStyle> 
     </DataGrid> 

それは私が結合していTextBlock内のテキストは表示されません。列名のテキストブロックが動作しません...してください。助けてください
enter image description here編集

答えて

0

あなたは各項目ののviewmodelを使用しない場合は、しかし、DataTableの行のオブジェクト、WPFは、名前「市」を認識することはできません。あなたは、グループ項目を表すオブジェクトのCollectionViewGroupInternal.Nameプロパティによって保持されているグループの名前を使用する必要があります。この特定のシナリオでは、それは都市の名前です。 NameをTextBlockにバインドするだけです。

グループのHeaderTemplateを使用して、少ないコード行で目標を達成できます。デフォルトのItemPresenterはヘッダーの下に表示されます。

<!-- resources --> 
<CollectionViewSource x:Key="devicesCollection" IsLiveSortingRequested="True" IsLiveGroupingRequested="True" Source="{Binding MyCollection}"> 
    <!-- Sorting --> 
    <CollectionViewSource.SortDescriptions> 
     <componentModel:SortDescription PropertyName="Id" /> 
    </CollectionViewSource.SortDescriptions> 

    <!-- Grouping --> 
    <CollectionViewSource.GroupDescriptions> 
     <PropertyGroupDescription PropertyName="City"/> 
    </CollectionViewSource.GroupDescriptions> 
</CollectionViewSource> 

<DataTemplate x:Key="GroupingHeader"> 
    <Border Background="Gray"> 
     <TextBlock Margin="10 5 5 5" FontSize="12" FontWeight="Bold" Text="{Binding Name}"/> 
    </Border> 
</DataTemplate> 

<!-- data grid --> 
<DataGrid ItemsSource="{Binding Source={StaticResource ResourceKey=devicesCollection}, Mode=OneWay}"> 
    <DataGrid.GroupStyle> 
     <GroupStyle HeaderTemplate="{StaticResource ResourceKey=GroupingHeader}" /> 
    </DataGrid.GroupStyle> 
</DataGrid> 
+0

I'tは何も同じ結果:( – santhosh

+0

を表示does'tそれはCollectionViewSourceオブジェクトで問題になることがあります。更新の答えを参照してください。 – Jacek

+0

それが仕事ではありません申し訳ありません:( – santhosh

関連する問題