数据科学中的r语言pdf:8.5.1 使用DataView排序

来源:百度文库 编辑:中财网 时间:2024/04/30 14:00:32

8.5 DataView类

DataView为DataTable对象定义了一个视图--换句话说,是DataTable中支持自定义过滤和排序设置的数据的一个表现。DataView提供了Sort属性和RowFilter属性来允许你配置这些设置。借助这些属性,你可以选择视图中可见的数据。不过,它们并不会影响DataTable里的真实数据。例如,假设你过滤一个表从而隐藏了某些行,这些行仍然在DataTable里,但它们不能通过DataView访问。

在数据绑定的场景中,DataView特别有用。利用它可以只显示表中的一部分数据,而在其他任务中使用这部分数据时,不需要额外的处理或修改。

每个DataTable都有一个默认的DataView和它相关联,但是你还可以在同一个表上创建多个表示不同视图的DataView对象。默认的DataView通过DataTable.DefaultView属性提供。

在下一个示例里,你将看到如何创建显示按不同字段排序或者按给定表达式过滤的记录集的网格。

8.5.1 使用DataView排序

下一个示例使用了一个带有3个GridView控件的页面。当页面加载时,它把一个DataTable绑定到每个网格上。不过,总共使用了3个不同的视图,它们分别用不同的字段对结果排序。

代码在开始时把员工列表读入DataSet:

 下一步是使用数据绑定来填充GridView控件。绑定第一个网格时,只需直接使用DataTable,它使用默认的DataView显示所有的数据。对于其他两个,首先需要创建DataView对象,然后再显式地设置它们的Sort属性。  

排序网格只要简单地把DataView.Sort属性设为合法的排序表达式就可以了。本示例使用单个字段对视图排序,不过只要提供用逗号分隔的列表,就可以按多个字段排序。看下面的示例:

 

注解

排序的依据是列的数据类型。数值和日期列从小到大排序,字符串列按字母排序,如果DataTable.CaseSensitive属性为假(默认值),就不考虑大小写。二进制类型的列不可以排序。还可以使用ASC和DESC特性指定按升序或降序排序。第10章将会再次使用排序,同时还会学习DataView过滤。

绑定网格后,还要触发数据绑定的过程,这样数据才会从DataTable复制到控件上。可以单独为每个控件做这件事情也可以像下面示例中那样调用Page.DataBind()为整个页面做这件事情:

 

图8-6显示了结果页面。

 图8-6  使用不同方式排序的网格