分组
RadDataGrid支持通过UI -进行分组操作分组的用户界面或以编程方式。
程序化的分组
的描述符中添加描述符可以实现编程式分组GroupDescriptors收集。有两种类型的描述符:
- PropertyGroupDescriptor:使用模型中的属性作为组键。
- DelegateGroupDescriptor:创建可使用的自定义组密钥。
所有groupdescriptor都位于Telerik.XamarinForms.Common.Data命名空间中:
xmlns: telerikCommon = " clr-namespace: Telerik.XamarinForms.Common.Data;装配= Telerik.XamarinForms.Common”
使用Telerik.XamarinForms.Common.Data;
属性组描述符
PropertyGroupDescriptor用于按定义对象的类的属性对DataGrid中的数据进行分组。
要使用PropertyGroupDescriptor,必须设置其属性PropertyName。
- PropertyName(string):获取或设置用于检索要分组的键的属性的名称。
方法可以轻松地按升序或降序对组进行排序排序方式财产。
例如,让我们有以下业务对象:
public class Person {public string Name {get;设置;} public int Age {get;设置;} public string部门{get;设置;}}
和ViewModel类的集合人对象:
公共类ViewModel{公共ViewModel() {this。人= new ObservableCollection <人>(){新人{Name =“纪子= 23岁部门=“生产”},新人{Name =“杰瑞”= 23岁部门=“会计与金融”},新人{Name =“伊桑= 51岁部门=“营销”},新人{Name =“伊莎贝拉”= 25岁部门=“营销”},新人{Name =“约书亚”= 45岁部门=“生产”},新人{Name =“Logan”= 26岁部门=“生产”},新人{Name =“伦”,年龄= 32,部门=“生产”},新人{名字=“埃琳娜”,年龄= 37,部门=“会计与财务”},新人{名字=“罗斯”,年龄= 30,部门=“营销”},};} public observablecollollection People {get;设置;}}
下一个片段演示了如何通过PropertyGroupDescriptor按“Department”属性对人员进行分组:
剩下的就是将ViewModel设置为页面的BindingContext:
这一点。BindingContext = new ViewModel();
下面是RadDataGrid在分组时的样子:
GroupHeaderTemplate
此外,您可以创建自定义GroupHeaderTemplate,以便在对DataGrid进行分组时获得所需的外观。GroupHeader的BindingContext是GroupHeaderContext对象,它包含以下属性:
- 描述符:指定用于分组的描述符;
- Group:获取组的详细信息,例如:
- 项目:获取组的子项目。
- Key:获取组键的具体信息。
- IsExpanded:定义一个值,该值指示当前组是否展开(使其子项可见)。
- 级别:获取组的从零开始的级别(或深度)。
下面的代码片段显示了GroupHeaderTemplate是如何定义的:
查看下图中的结果:
委托组描述符
两者之间的区别DelegateGroupDescriptor和PropertyGroupDescriptor是DelegateGroupDescriptor通过一个自定义的Key分组数据,而PropertyGroupDescriptor通过一个自定义的Key分组,这是我们模型的一个属性。
你必须设置DelegateGroupDescriptor的以下属性:
- KeyLookup:获取或设置IKeyLookup实例,该实例用于检索每个数据项的组键。
方法可以轻松地按升序或降序对组进行排序排序方式财产。
您必须创建一个实现IKeyLookup接口,它将返回您想要分组的键。然后您需要添加DelegateGroupDescriptor到RadDataGrid。GroupDescriptorscollection and set itsKeyLookUp财产。
检查下面的示例IKeyLookup实现:
类CustomIKeyLookup: Telerik.XamarinForms.Common.Data.IKeyLookup{公共对象GetKey(对象实例){var item =实例作为Person;返回项目? . name [0];}}
将其添加到GroupDescriptors收集RadDataGrid:
this.dataGrid.GroupDescriptors。Add(new DelegateGroupDescriptor() {KeyLookup = new CustomIKeyLookup()});
下面是RadDataGrid通过DelegateGroupDescriptor分组时的样子:
分组的用户界面
分组UI是设计启用的,它允许用户按列值对数据进行分组。分组UI公开了以下属性:
- UserGroupMode:定义是否启用/禁用分组UI。可用的选项有汽车/启用/禁用。UserGroupMode默认值为汽车。
以下属性用于启用/禁用特定列的分组:
- CanUserGroup(bool):定义一个值,该值指示用户是否可以通过分组UI筛选列。
的DataGrid/分组文件夹中可以找到分组示例SDK示例浏览器应用程序。
展开和折叠组
RadDataGrid支持组扩展和折叠操作,无论是通过UI点击组头或编程。默认情况下,所有组都展开。
本帮助主题将概述用于控制DataGrid组的展开/折叠状态的方法和命令。
获取分组的DataGrid项
要操作可折叠的DataGrid组,首先需要调用itsGetDataView方法。简而言之,GetDataView方法提供了应用所有Sort、Group和Filter操作后ItemsSource的视图。返回类型为IDataViewCollection它公开了下面几节中描述的展开和折叠方法。
var dataView = this.dataGrid.GetDataView();
展开和折叠所有组
要展开所有组,请使用ExpandAll方法和分别使用CollapseAll方法-折叠所有组。
//扩展所有var dataView = this.dataGrid.GetDataView();dataView.ExpandAll ();//崩溃所有var dataView = this.dataGrid.GetDataView();dataView.CollapseAll ();
展开和折叠某个组
方法检索第一级组GetGroups的方法IDataViewCollection对象和用法ExpandGroup/CollapseGroup使某一群体分别扩大或缩小。您可以通过查看分组是否扩容GetIsExpanded方法。
下面是如何使用这些方法的简短片段:
var dataView = this.dataGrid.GetDataView();var rootGroups = dataView.GetGroups();var isFirstExpanded = dataview . getisexpamed (rootGroups.First());//扩展某个组dataView.ExpandGroup(rootGroups.First());//分解某个组dataView.CollapseGroup(rootGroups.First());
此外,IDataViewCollection提供了ExpandItem/CollapseItem方法,将数据项作为参数并展开/折叠包含此项的即时组。
var lastItem = (dataGrid. var lasttitem = (dataGrid. var)ItemsSource为IEnumerable).Last();var dataView = this.dataGrid.GetDataView();dataView.CollapseItem (lastItem);