csharp wpf datagrid合并列值相同的行并展示效果
时间: 2024-01-31 18:03:29 浏览: 28
可以通过使用 WPF DataGrid 控件的 Grouping 功能来实现合并列值相同的行并展示效果。
首先在 XAML 中设置 DataGrid 的 GroupStyle,如下所示:
```xml
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Background="LightGray"/>
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
```
然后在绑定的数据源中添加一个用于分组的属性,例如:
```csharp
public class MyData
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public string Group { get { return Name + Age.ToString(); } }
}
List<MyData> dataList = new List<MyData>
{
new MyData { Name = "John", Age = 25, City = "New York" },
new MyData { Name = "Mary", Age = 30, City = "Los Angeles" },
new MyData { Name = "John", Age = 25, City = "Chicago" },
new MyData { Name = "Peter", Age = 35, City = "San Francisco" }
};
```
最后在 DataGrid 中绑定数据源并设置分组的属性即可:
```xml
<DataGrid ItemsSource="{Binding dataList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Age" Binding="{Binding Age}"/>
<DataGridTextColumn Header="City" Binding="{Binding City}"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Background="LightGray"/>
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.GroupDescriptions>
<PropertyGroupDescription PropertyName="Group"/>
</DataGrid.GroupDescriptions>
</DataGrid>
```
这样就可以把数据按照 Name 和 Age 属性合并,展示在一个分组中。