——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
DataView提供了一种过滤和排序DataTable中数据的一种方式在从数据库中选择数据时用户一般可以单击列标题对数据排序此外还可以只过滤要显示在某些行中的数据例如用户修改过的所有数据DataView允许限制要显示给用户的数据行但不允许限制DataTable中的数据列
提示DataView不允许修改要显示的数据列只允许修改要显示的数据行
本章后面的DataGridTableStyle和DataGridColumnStyle一节将介绍一个示例说明如何限制要显示的数据列
根据现有的DataTable创建DataView的代码如下所示DataView dv = new DataView(dataTable);
创建好后就可以改变DataView上的设置当该视图显示在DataGrid中时这些设置会影响要显示的数据以及允许对这些数据进行的操作例如
●设置 AllowEdit = false表示在数据行上禁用所有列的编辑功能
●设置AllowNew = false 表示禁用新行功能
●设置 AllowDelete = false表示禁用删除行的功能
●设置 RowStateFilter只显示指定状态的行
●设置 RowFilter 可过滤数据行
●按照给定的列排序
下一节将介绍使用RowStateFilter设置其他选项都是可以自我解释的
() 通过数据过滤数据行
创建好DataView后就可以通过设置RowFilter属性来改变视图中的数据这个属性是一个字符串可用作按照给定条件过滤数据的一种方式—— 该字符串的值就是过滤条件其语法类似于一般SQL中的WHERE子句但主要是对已经从数据库中选择出来的数据进行操作过滤子句的一些示例如表所示
子 句说 明UnitsInStock > 只显示UnitsInStock列大于的行Client = Smith只返回给定客户的记录County LIKE C*返回County字段以C开头的所有记录—— 例如返回Cornwall CumbriaCheshire和 Cambridgeshire所在的行可以使用%表示匹配一个字符的通配符而*表示匹配个或多个字符的通配符
表
运行环境尽可能在过滤表达式中使用与源列相匹配的数据类型例如在前面的示例中使用UnitsInStock > 表达式就是合法的尽管该列是一个整数列但如果提供了一个无效的过滤字符串就会产生EvaluateException
() 根据状态过滤数据行
DataView中的每一行都有一个定义好的行状态它们的值如表所示这些状态也可以用于过滤用户查看的行
DataViewRowState说 明Added新创建的所有行CurrentRows除了被删除的行以外的其他行Deleted最初被选中且已经删除的行—— 不显示已经删除的新建行ModifiedCurrent列出所有已被修改的行并显示这些行的当前值ModifiedOriginal列出所有已被修改的行但显示这些行的初值而不是当前值OriginalRows最初从数据源中选中的所有行不包括新行显示列的初值(即如果进行了修改不显示当前值)Unchanged没有修改的行
表
[] []