使用FlexGrid > 分组 > 使用C1FlexGridGroupPanel控件 |
为使用C1FlexGridGroupPanel控件,添加该控件在窗体上的某个C1FlexGrid控件上方,并设置其FlexGrid属性,使得其引用该C1FlexGrid用来显示数据。例如:
XAML |
拷贝代码
|
---|---|
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition /> </Grid.RowDefinitions> <c1:C1FlexGridGroupPanel Background="WhiteSmoke" FlexGrid="{Binding ElementName=_flex}"/> <c1:C1FlexGrid x:Name="_flex" Grid.Row="1" /> </Grid> |
该段XAML是非常简单的。C1FlexGridGroupPanel不需要设置样式,因为它将从控制的C1FlexGrid获取所需的属性设置。如果您改变了列Header的背景,前景或者字体,则C1FlexGridGroupPanel 将自动地使用这些元素来渲染分组标记,使得其看起来和列Header一样。
该段XAML将产生下图所示结果:
该图像显示了按照“Color”以及“Line”进行分组的产品的C1FlexGrid。该分组通过拖拽Grid列至分组区操作进行创建。
在本图像中,“Cost”列高亮显示,因为它正在被拖到分组区域。位于“Line”分组标记右侧的橙色光标指示新分组插入的位置。
您可以通过设置DragMarkerColor属性改变拖拽标记的颜色(图中所示为橙色)。
一旦一个分组被创建,则关联的列默认将被隐藏。这是一个可选的功能,您可以通过设置HideGroupedColumns 属性的值为false关闭该设置。
您可以单击分组标记以便按照升序或者降序的方式对分组中的数据进行排序。按下Control键并单击分组Header以移除排序状态。这是和在其他平台下的C1FlexGrid相同的行为。
您也可以在分组区域拖拽分组标记以便重新排布分组,或者将其拖拽回Grid区域已撤销分组,并将该列恢复到任意位置。分组标记也具有关闭按钮(“×”),您可以单击以删除该分组。
C1FlexGridGroupPanel通过用作Grid数据源的ICollectionView接口管理分组。对分组所做的全部改变对绑定到相同的ICollectionView的控件可见。注意,这意味着分组特性不能用于非绑定使用场景。
当C1FlexGridGroupPanel创建了一个新的分组时,它将触发一个PropertyGroupCreated事件,允许应用程序自定义该新建的分组。该事件通常用来为新创建的分组指定自定义转换器。例如:
C# |
拷贝代码
|
---|---|
/// <summary> /// 自定义由C1FlexGridGroupPanel创建的分组描述。 /// </summary> void _groupPanel_PropertyGroupCreated(object sender, PropertyGroupCreatedEventArgs e) { var pgd = e.PropertyGroupDescription; switch (pgd.PropertyName) { case "Introduced": pgd.Converter = new DateTimeGroupConverter(); break; case "Price": pgd.Converter = new AmountGroupConverter(1000); break; case "Cost": pgd.Converter = new AmountGroupConverter(300); break; } } |
该代码处理了PropertyGroupCreated事件,并指定自定义转换器至数据源的不同列。在本示例中,DateTimeGroupConverter以及AmountGroupConverter类是用来对DateTime以及双精度类型的值转换为不同范围的简单转换器。
下图显示了自定义分组的效果:
请注意项目可能出现在多个不同的分组中。例如,DateTimeGroupConverter将日期分组为“本周”,“本年度”,“去年”,以及“去年以前”。“本周”分组的项目也包括在“本年度”分组中。
这是ICollectionView接口本身提供的功能,并不是C1FlexGrid或者C1FlexGridGroupPanel提供的特定功能。