2015-10-07 34 views
1

我想按两列对我的数据网格进行分组。名字和姓氏。 它基本上工作,但它弄乱了我的整个布局。WPF Datagrid按两列分组 - 布局

我的代码:

的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布局大多是完美的。但随着第二groupdescription(“nachname”),它就会变得混乱:

grouping in datagrid by two columns

任何想法如何,我可以修复布局?也许有不同的分组方式? 谢谢

回答

2

如果通过'messy'您是指为Max Musterfrau设置的重复结果集,并且您确实只希望一个组成为名称+姓氏的唯一集合(因此Max Musterfrau,Max Smith和Johnny Smith都是单一的,分开的组)...你可以添加一个新的属性到你的ViewModel,它返回完整的,唯一的名字作为一个属性。然后为该属性添加一个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); 
+0

感谢的人,这有助于 –

+0

没问题,问另外一个问题,如果你需要什么:) –

+0

很高兴看到近期和相关的WPF问题回答这么快: )。 – Den