- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在实现一个 WPF DataGrid,其中包含具有许多关键数据的项目。项目按项目类别分组。
对于每个类别应该有:
这些行应该始终位于每个组的顶部(排序过滤)。
我的第一个解决方案是将此数据放在组标题中。这不是一个好的解决方案,因为组标题不支持列。即它应该通过获取列宽来构建。
这可以做到,但当用户想要重新排序和隐藏列时,它会变得复杂。
DataGrid 使用 CollectionViewSource,因此它没有填充 C# 代码。基本上我正在扩展这个例子:http://msdn.microsoft.com/en-us/library/ff407126.aspx
谢谢和最好的问候 - matti
最佳答案
在我的一个项目中,我有一个黑客组合的 DataGrid,其中包含组小计行。我们并不关心您提出的一些问题,例如隐藏和排序列,所以我不确定是否可以为此进行扩展。我也意识到可能存在性能问题,这可能是大型集合的问题(我的窗口正在运行 32 个独立的 DataGrids - 哎哟)。但它与我见过的其他解决方案的方向不同,所以我想我会把它扔在这里看看它是否能帮助你。
我的解决方案包含两个主要部分:
1. 小计行不是主 DataGrid 中的行,而是单独的 DataGrid。我实际上在每个组中有 2 个额外的网格:1 个在标题中,仅在组折叠时显示,一个在 ItemsPresenter 下方。小计 DataGrids 的 ItemsSource 来自一个转换器,该转换器获取组中的项目并返回聚合 View 模型。小计网格的列与主网格完全相同(在 DataGrid_Loaded 中填写,但我确信它也可以在 xaml 中完成)。
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander Background="Gray" HorizontalAlignment="Left" IsExpanded="True"
ScrollViewer.CanContentScroll="True">
<Expander.Header>
<DataGrid Name="HeaderGrid" ItemsSource="{Binding Path=., Converter={StaticResource SumConverter}}"
Loaded="DataGrid_Loaded" HeadersVisibility="Row"
Margin="25 0 0 0" PreviewMouseDown="HeaderGrid_PreviewMouseDown">
<DataGrid.Style>
<Style TargetType="DataGrid">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=IsExpanded}"
Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
</DataGrid>
</Expander.Header>
<StackPanel>
<ItemsPresenter/>
<DataGrid Name="FooterGrid" ItemsSource="{Binding ElementName=HeaderGrid, Path=ItemsSource, Mode=OneWay}"
Loaded="DataGrid_Loaded" HeadersVisibility="Row"
Margin="50 0 0 0">
<DataGrid.Style>
<Style TargetType="DataGrid">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=IsExpanded}"
Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid>
</StackPanel>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
2. 那么问题是如何让所有的DataGrids 表现得好像它们是一个单一的网格。我通过在一个名为 DataGridSharedSizeTextColumn
的类中子类化 DataGridTextColumn
(在这种情况下我们只有文本,但其他列类型也应该工作)来处理这个问题,该类模仿 SharedSizeGroup 的行为网格类。它有一个带有组名的字符串依赖属性,并跟踪同一组中的所有列。当一列中的 Width.DesiredValue
发生变化时,我会更新所有其他列中的 MinWidth 并使用 DataGridOwner.UpdateLayout()
强制进行更新。此类还涵盖列重新排序,并在 DisplayIndex 更改时进行组范围内的更新。我认为此方法也适用于任何其他列属性,只要它具有 setter。
选择、复制等还有其他烦人的事情要解决。但事实证明,使用 MouseEntered 和 MouseLeave 事件以及使用自定义复制命令可以很容易地处理这些问题。
关于c# - 如何处理组小计,例如WPF DataGrid 中的目标行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652203/
源 XML: A 10 A 10 B 10
我有一个如下所示的 Excel 电子表格(我将所有 secret 信息设为白色字体,因此请忽略空格) 总列在 d 列或第 4 列。我需要做的是对 d 列中的值进行小计,直到它到达显示“...-TOTA
我有以下值的数组 Array ( [0] => Array ( [order_date] => 2016-01-01 [sku
我目前正在使用此代码段在我的 Magento 商店的 topcart 中显示购物车总数。我的问题是当产品放入购物车时它并不总是更新,它只是显示 0$,尤其是可配置的产品。但是当第二个产品放入购物车时,
问题, 我有这样的表格: PID Category Year 1 AAA 2011 2 AAA 2012 3 BBB 2011 4 CCC 20
我很难解决一个简单的问题。如何在 django 模板中计算总计和小计? 假设我想生成客户订单的报告,例如: Desired Report Output Customer1 1 Wi
您可以在问题的编辑部分找到 C# 的解决方案。特别感谢 Bruno Lowagie 我正在尝试通过 C# 中的 iTextSharp 创建发票。它工作得很好,但是当我尝试在每一页上打印小计时我遇到了问
我有 2 个大型事件表。第一个表是一个数据表 (tblData),其中包含日期、持续时间和代码(用于标识事件)。第二个表是每个事件花费的总时间的汇总表 (tblSummary)。 如何筛选 tblDa
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
这是我使用的数据示例: SCENARIO DATE POD AREA IDOC STATUS TYPE AAA 02.06.2015 JKJKJKJ
我有一个包含 2 组行的数据表,我想要一列的总和/小计,例如,每个分组行的年龄(我知道这没有意义;))。 这是一个JSFiddle . $(document).ready(functi
客户提出需求,针对某一列分组加上小计,合计汇总。网上找了一些有关SQL加合计的语句。都不是很理想。决定自己动手写。 思路有三个: 1.很多用GROUPPING和ROLLUP来实现。 优
想象一下这个类似 DTO 的类: class LineItem : INotifyPropertyChanged { public event PropertyChangedEventHand
结构如下:
我非常希望有人能够帮助解决这个似乎在我们的 magento(版本 1.6.2.0)结帐和应用折扣代码时发生的错误。这不是最容易解释的,所以我附上了一张图片: http://i.imgur.com/iX
当我尝试使用带有 0.00 美元小计的 PayPal API 时,我收到错误: [10413] => The totals of the cart item amounts do not match
出于某种原因,当我尝试使用 SDK 授权 PayPal 付款时,我的日志中不断出现以下错误: ERROR: Got Http response code 400 when accessing http
我在我的 .Net MVC 4 Razor 网站上使用 PayPal 的 REST API。 在创建付款时,我通过 fiddler 跟踪了以下请求和响应: 任何人都可以解释导致错误的原因吗?交易总金额
我是一名优秀的程序员,十分优秀!