2012-04-23 17 views
4

私は、データグリッドを使用する必要があり、次のように私のデータが見えます: のfirstName、lastNameの、通り、郵便番号、都市、国、画像手動でグループのDataGridアイテム

は私のデータグリッドでは、私が唯一のfirstName、lastNameのと表示されます都市の後にグループ化する必要があります。

ショーグループ化されたアイテムが、私は(firstNameの、lastNameの、画像)を表示したい3つの項目以下のコードは、すべての項目(firstNameの、lastNameの、通り、郵便番号、都市、国、イメージ)あたりが続いている 更新行。私は、グループ化のための適切な方法を使用することです

<Grid> 
    <DataGrid ItemsSource="{Binding GroupedMovables}"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Preview" Width="SizeToCells" IsReadOnly="True"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Image Name="Preview" Height="20" Source="{Binding Image}" HorizontalAlignment="Center" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTextColumn Header="first name" Binding="{Binding FirstName}" /> 
      <DataGridTextColumn Header="last name" Binding="{Binding LastName}" /> 
     </DataGrid.Columns> 
     <DataGrid.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding Path=City}" FontWeight="Bold" Padding="3"/> 
         </StackPanel> 
        </DataTemplate> 
       </GroupStyle.HeaderTemplate> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}"> 
            <Expander> 
             <Expander.Header> 
              <StackPanel Orientation="Horizontal"> 
               <TextBlock Text="{Binding Path=Name}" /> 
               <TextBlock Text="{Binding Path=ItemCount}" Margin="8,0,4,0"/> 
               <TextBlock Text="Element(s)"/> 
              </StackPanel> 
             </Expander.Header> 
             <ItemsPresenter /> 
            </Expander> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
     </DataGrid.GroupStyle> 
    </DataGrid> 
</Grid> 
+0

詳しく説明してください:正確に、機能していませんでしょうか?コードでエラーが発生していますか?もしそうなら、エラーは何ですか?それは間違って表示されますか?もしそうなら、それは今どのように表示されますか、それはあなたが望むものとどのように違いますか?ありがとう。 –

+0

私は説明を更新しました。 – iop

+0

''を削除するとどうなりますか? – LPL

答えて

7

...、私は自分自身でこれを管理することはできません誰も私を助けることができる

..私は<ItemsPresenter />しかしthatsの唯一の憶測を交換する必要が考えますCollectionView(詳細はHow to Navigate, Group, Sort and Filter Data in WPF)。次はあなたがあなたのデータをグループ化するためCollectionViewを使用する方法をお見せするために私が作成したコンセプトアプリケーションの簡単な証拠である:

このクラスは、データグリッド内の行を表しています。後ろの

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Street { get; set; } 
    public string ZipCode { get; set; } 
    public string City { get; set; } 
    public string Country { get; set; } 
    public string Image { get; set; } 
} 

MaindWindowコード:

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     // Create some test data 
     var employees = 
      new ObservableCollection<Employee> 
       { 
        new Employee {FirstName = "Mohammed", LastName = "Fadil", Street = "A B C", ZipCode = "123", City = "London", Country = "UK", Image = "/Images/globe.png"}, 
        new Employee {FirstName = "Siraj", LastName = "Hussam", Street = "A B C", ZipCode = "123", City = "London", Country = "UK", Image = "/Images/globe.png"}, 
        new Employee {FirstName = "Ayman", LastName = "Tariq", Street = "A B C", ZipCode = "123", City = "London", Country = "UK", Image = "/Images/globe.png"}, 
        new Employee {FirstName = "Khalid", LastName = "Sheik", Street = "X Y Z", ZipCode = "234", City = "Paris", Country = "France", Image = "/Images/monitor.png"}, 
        new Employee {FirstName = "Hassan", LastName = "Ali", Street = "Q W E R", ZipCode = "544", City = "NY", Country = "USA", Image = "/Images/star.png"}, 
        new Employee {FirstName = "Ehsan", LastName = "Mahmoud", Street = "A B C", ZipCode = "123", City = "London", Country = "UK", Image = "/Images/globe.png"}, 
        new Employee {FirstName = "Idris", LastName = "Sheik", Street = "X Y Z", ZipCode = "234", City = "Paris", Country = "France", Image = "/Images/monitor.png"}, 
        new Employee {FirstName = "Khalil", LastName = "Ali", Street = "Q W E R", ZipCode = "544", City = "NY", Country = "USA", Image = "/Images/star.png"} 
       }; 

     ICollectionView employeesView = 
      CollectionViewSource.GetDefaultView(employees); 

     // Set the grouping by city proprty 
     employeesView.GroupDescriptions.Add(new PropertyGroupDescription("City")); 

     // Set the view as the DataContext for the DataGrid 
     EmployeesDataGrid.DataContext = employeesView; 
    } 
} 

データグリッドXAMLコード:

<DataGrid Name="EmployeesDataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding FirstName}" Header="First Name"/> 
      <DataGridTextColumn Binding="{Binding LastName}" Header="Last Name"/> 
      <DataGridTemplateColumn Header="Image"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Image Source="{Binding Image}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 

     <DataGrid.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding Path=City}" FontWeight="Bold" Padding="3"/> 
         </StackPanel> 
        </DataTemplate> 
       </GroupStyle.HeaderTemplate> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}"> 
            <Expander> 
             <Expander.Header> 
              <StackPanel Orientation="Horizontal"> 
               <TextBlock Text="{Binding Path=Name}" /> 
               <TextBlock Text="{Binding Path=ItemCount}" Margin="8,0,4,0"/> 
               <TextBlock Text="Element(s)"/> 
              </StackPanel> 
             </Expander.Header> 
             <ItemsPresenter /> 
            </Expander> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
     </DataGrid.GroupStyle> 

    </DataGrid> 

結果は次のとおりです。DataGridのグループをスタイリングの詳細については

Result

この記事をチェックしてください:WPF DataGrid Control > Grouping

+0

あなたが投稿したwpftutorial.netの例は、私が使ったものです。私は何が間違っているのか分かりませんが、あなたが提供したコードが実行したいと思うように実行します。ありがとう! – iop

+0

@iop、私の投稿したコードを新しいサンプルプロジェクトで実行しようとすると、正常に動作します。 –

+0

@iop、このウィンドウを実行して、 'GroupedMovables'へのバインディングに問題がないかどうかを確認するには、出力ウィンドウを確認してください –

関連する問題