WPFアプリケーションの開発をしています。
同一の値を持つ隣接セルをマージ(行方向)する方法についてご教授頂きたいです。
実現のための方法、その他アドバイス等頂けると幸いです。
試したこと
下記サイトを参考に、マージを行う列はグループ化で実装できるのではないかと試しております。
https://stackoverflow.com/questions/23988232/vertical-grouping-wpf-datagrid-or-listview
実現したいこと
参考サイトから追加で実現したい内容
・グループ化した項目のヘッダを表示させたい
・グループ化した項目に対してもデータによって表示方法を変更したい
(項目の値によって表示フォーマットを変える、数値なら右寄せ等)
下記コードではState、Term、Rateの3つのプロパティ名でグループ化しています。
グループ化した項目に対しての、見た目の制御方法が分らず、ご教授頂きたいです。
###該当コード
XAML
1<Grid> 2 <DataGrid ItemsSource="{Binding TotalDatas}" 3 AutoGenerateColumns="False" 4 CanUserAddRows="False" 5 CanUserDeleteRows="False" 6 SelectionMode="Single" 7 FontSize="18"> 8 <DataGrid.GroupStyle> 9 <GroupStyle> 10 <GroupStyle.ContainerStyle> 11 <Style TargetType="{x:Type GroupItem}"> 12 <Setter Property="Template"> 13 <Setter.Value> 14 <ControlTemplate TargetType="{x:Type GroupItem}"> 15 <Grid> 16 <Grid.ColumnDefinitions> 17 <ColumnDefinition Width="auto" /> 18 <ColumnDefinition /> 19 </Grid.ColumnDefinitions> 20 <Border BorderBrush="Black" BorderThickness=".5" Padding="4"> 21 <TextBlock Text="{Binding Name}" VerticalAlignment="Center" /> 22 </Border> 23 <ItemsPresenter Grid.Column="1" /> 24 </Grid> 25 </ControlTemplate> 26 </Setter.Value> 27 </Setter> 28 </Style> 29 </GroupStyle.ContainerStyle> 30 </GroupStyle> 31 </DataGrid.GroupStyle> 32 <DataGrid.Columns> 33 <DataGridTextColumn Header="状態" Binding="{Binding State}" Width="Auto" IsReadOnly="True"> 34 <DataGridTextColumn.CellStyle> 35 <Style TargetType="{x:Type DataGridCell}"> 36 <Setter Property="Background" Value="{Binding Path=StateColor}"></Setter> 37 </Style> 38 </DataGridTextColumn.CellStyle> 39 </DataGridTextColumn> 40 <DataGridTextColumn Header="時間(分)" Binding="{Binding Term.TotalMinutes, Mode=OneWay, StringFormat=\{0:F\}}" Width="Auto"> 41 <DataGridTextColumn.CellStyle> 42 <Style TargetType="{x:Type DataGridCell}"> 43 <Setter Property="HorizontalAlignment" Value="Right"/> 44 </Style> 45 </DataGridTextColumn.CellStyle> 46 </DataGridTextColumn> 47 <DataGridTextColumn Header="割合" Binding="{Binding Rate, StringFormat=\{0:P\}}" Width="auto" IsReadOnly="True"></DataGridTextColumn> 48 <DataGridTextColumn Header="内訳" Binding="{Binding ChildItem1}" Width="Auto" IsReadOnly="True"> 49 <DataGridTextColumn.CellStyle> 50 <Style TargetType="{x:Type DataGridCell}"> 51 <Setter Property="Background" Value="{Binding Path=ChildStateColor}"></Setter> 52 </Style> 53 </DataGridTextColumn.CellStyle> 54 </DataGridTextColumn> 55 <DataGridTextColumn Header="内訳2" Binding="{Binding ChildItem2}" Width="Auto" IsReadOnly="True"> 56 <DataGridTextColumn.CellStyle> 57 <Style TargetType="{x:Type DataGridCell}"> 58 <Setter Property="Background" Value="{Binding Path=ChildStateColor}"></Setter> 59 </Style> 60 </DataGridTextColumn.CellStyle> 61 </DataGridTextColumn> 62 </DataGrid.Columns> 63 </DataGrid> 64 </Grid>
グループ化部分抜粋
VB
1 Dim tmpView As CollectionView = CType(CollectionViewSource.GetDefaultView(Me._TotalDatas), CollectionView) 2 tmpView.GroupDescriptions.Add(New PropertyGroupDescription("State")) 3 tmpView.GroupDescriptions.Add(New PropertyGroupDescription("Term")) 4 tmpView.GroupDescriptions.Add(New PropertyGroupDescription("Rate"))
補足情報(FW/ツールのバージョンなど)
.NET Framework 4
Livet
VB.net
回答2件
あなたの回答
tips
プレビュー