我正在研究wpf应用程序,它正在使用数据库中的项填充datagrid。 那些项目代表咖啡店的用户以及他们赚了多少钱......这是一张图片:
约翰
现金$ 192,00
John Doe
现金75,00美元
卡丁车75,00
现在我正在填充我的数据网格:
dtgCashAmount.ItemsSource = null;
dtgCashAmount.ItemsSource = BController.GetAllFinancialTransactionsByAllUsers(dateFrom, dateTo);
但是我试过这样的事情(按用户名实际分组项目) - 但是它没有工作:
首先我在我的XAML中添加了Window.Resources
:
<Window.Resources>
<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<ItemsPresenter />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在此之后,我在datagrid
<GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
在我的C#代码中,我尝试过这样的事情:
ListCollectionView collection = new ListCollectionView(DatabaseResults);
collection.GroupDescriptions.Add(new PropertyGroupDescription("Username"));
基本上我说:好的组这些结果我是通过用户名从数据库获得的,以获得我在上面的问题中提供的结果(如下图所示)。 但不幸的是,我收到了以下错误:
在使用ItemsSource之前,项目集合必须为空。
即使我检查过我没有在其他地方设置我的数据网格源..
DataGrid XAML:
<DataGrid Grid.Row="1" IsReadOnly="True" Name="dtgCashAmount " EnableRowVirtualization ="True" EnableColumnVirtualization = "True" GridLinesVisibility="Horizontal" AutoGenerateColumns="False" RowHeaderWidth="0" CanUserAddRows="False">
<GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
<DataGrid.CellStyle>
<StaticResource ResourceKey="DataGridCentering"/>
</DataGrid.CellStyle>
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#0091EA"/>
<Setter Property="Opacity" Value="1"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="Height" Value="40"/>
</Style>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn x:Name="colPaymentType" Binding="{Binding PaymentType.Title }" Header="Payment type" Foreground="Black" FontSize="{x:Static local:Globals.dataGridfontSizeContent}" FontFamily="Verdana" Width="10*"/>
<DataGridTextColumn x:Name="colKorisnik" Binding="{Binding Username }" Header="Username" Foreground="Black" FontSize="{x:Static local:Globals.dataGridfontSizeContent}" FontFamily="Verdana" Width="10*"/>
<DataGridTextColumn x:Name="colPrice" Binding="{Binding TotalAmount}" Header="Total amount" Foreground="Black" FontSize="{x:Static local:Globals.dataGridfontSizeContent}" FontFamily="Verdana" Width="10*"/>
</DataGrid.Columns>
</DataGrid>
在 mm8 之后帮助我现在看起来像这样:
我在互联网上看到了一个更好的例子(对于用户来说测试它组织得很好):
mm8伙伴是否有可能实现这样的目标?
答案 0 :(得分:1)
GroupStyle
应在<DataGrid.GroupStyle>
元素中定义:
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</DataGrid.GroupStyle>
...而不是<DataGrid>
元素的直接子元素。