WPF Datagrid 按两列分组 - 布局
WPF Datagrid Grouping by two columns - Layout
我想按两列对数据网格进行分组。名字和姓氏。
它基本上可以工作,但它弄乱了我的整个布局。
我的代码:
Xaml:
<DataGrid x:Name="dgErfasst" RowEditEnding="dgMitarbeiter_RowEditEnding" AutoGenerateColumns="False" Margin="0,23,8,53" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" HeadersVisibility="Column" Background="White" SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="true" Width="auto" Header="ID" Binding="{Binding id}"/>
<DataGridTextColumn Width="*" Header="Bezeichnung" Binding="{Binding bezeichnung}"/>
<DataGridTextColumn Width="*" Header="Typ" Binding="{Binding typ}"/>
<DataGridTextColumn Width="*" Header="Nettopreis" Binding="{Binding nettopreis}"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Margin" Value="0,0,0,5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel Background="#FF706F6F" DataContext="{Binding Items}">
<DockPanel HorizontalAlignment="Stretch" Margin="0 5px 0 5px">
<TextBlock Foreground="White" FontWeight="Bold" Margin="0 0 20px 0" TextWrapping="NoWrap">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="vorname" />
<Binding Path="nachname" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DockPanel>
<ItemsPresenter />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
CS:
dgErfasst.ItemsSource = mainController.loadErfasst();
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(dgErfasst.ItemsSource);
cv.GroupDescriptions.Clear();
PropertyGroupDescription pgd = new PropertyGroupDescription("vorname"); //name
cv.GroupDescriptions.Add(pgd);
pgd = new PropertyGroupDescription("nachname"); //surname
cv.GroupDescriptions.Add(pgd);
如果我只添加一个 groupdescription 布局基本上是完美的。但是对于第二个组描述("nachname"),它变得混乱:
关于如何修复布局的任何想法?也许是一种不同的分组方式?
谢谢
如果 'messy' 你的意思是 Max Musterfrau 的重复结果集,你真的只希望一组是姓名 + 姓氏的唯一集合(所以 Max Musterfrau、Max Smith 和 Johnny Smith 都是单个单独的组)...您可以向您的 ViewModel 添加一个新的 属性,returns 完整的唯一名称作为单个 属性。然后为 属性 添加一个 PropertyGroupDescription
。
public string FullName { get { return vorname + " " + nachname; } }
还有...
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(dgErfasst.ItemsSource);
cv.GroupDescriptions.Clear();
PropertyGroupDescription pgd = new PropertyGroupDescription("FullName"); //name
cv.GroupDescriptions.Add(pgd);
我想按两列对数据网格进行分组。名字和姓氏。 它基本上可以工作,但它弄乱了我的整个布局。
我的代码:
Xaml:
<DataGrid x:Name="dgErfasst" RowEditEnding="dgMitarbeiter_RowEditEnding" AutoGenerateColumns="False" Margin="0,23,8,53" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" HeadersVisibility="Column" Background="White" SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="true" Width="auto" Header="ID" Binding="{Binding id}"/>
<DataGridTextColumn Width="*" Header="Bezeichnung" Binding="{Binding bezeichnung}"/>
<DataGridTextColumn Width="*" Header="Typ" Binding="{Binding typ}"/>
<DataGridTextColumn Width="*" Header="Nettopreis" Binding="{Binding nettopreis}"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Margin" Value="0,0,0,5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel Background="#FF706F6F" DataContext="{Binding Items}">
<DockPanel HorizontalAlignment="Stretch" Margin="0 5px 0 5px">
<TextBlock Foreground="White" FontWeight="Bold" Margin="0 0 20px 0" TextWrapping="NoWrap">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="vorname" />
<Binding Path="nachname" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DockPanel>
<ItemsPresenter />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
CS:
dgErfasst.ItemsSource = mainController.loadErfasst();
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(dgErfasst.ItemsSource);
cv.GroupDescriptions.Clear();
PropertyGroupDescription pgd = new PropertyGroupDescription("vorname"); //name
cv.GroupDescriptions.Add(pgd);
pgd = new PropertyGroupDescription("nachname"); //surname
cv.GroupDescriptions.Add(pgd);
如果我只添加一个 groupdescription 布局基本上是完美的。但是对于第二个组描述("nachname"),它变得混乱:
关于如何修复布局的任何想法?也许是一种不同的分组方式? 谢谢
如果 'messy' 你的意思是 Max Musterfrau 的重复结果集,你真的只希望一组是姓名 + 姓氏的唯一集合(所以 Max Musterfrau、Max Smith 和 Johnny Smith 都是单个单独的组)...您可以向您的 ViewModel 添加一个新的 属性,returns 完整的唯一名称作为单个 属性。然后为 属性 添加一个 PropertyGroupDescription
。
public string FullName { get { return vorname + " " + nachname; } }
还有...
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(dgErfasst.ItemsSource);
cv.GroupDescriptions.Clear();
PropertyGroupDescription pgd = new PropertyGroupDescription("FullName"); //name
cv.GroupDescriptions.Add(pgd);