2015-10-07 145 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