DataGrid能够非常灵活地显示数据源中的数据。除了调用方法SetDataBinding()时参数可以是DataSet和要显示的表名外,还可以将下述任何一个数据源作为参数调用该方法。
数组。
DataTable。
DataView。
DataSet或DataViewManager。
实现IListSource接口的组件。
实现IList接口的组件。
1.显示数组数据
实现显示数组数据的功能比较简单,只需将创建的数组填充一些数据,然后在DataGrid控件上调用SetDataSource(array,null)即可。看下面的代码:
SetDataBinding带有两个参数,第一个参数是数据源,在本例中就是数组,第二个参数是null,除非数据源是一个DataSet或DataViewManager类,此时这个参数应是要显示的表名。
2.DataTable
可以通过如下两种方式在DataGrid控件中显示DataTable。
如果DataTable是独立的,则调用SetDataBinding(DataTable,null)实现。
如果在DataSet中包含DataTable,则调用SetDataBinding(DataSet,"<Table Name>")实现。
3.显示DataView数据
在DataView中,实现了对DataTable中数据的过滤和排序操作。当从数据库中选择数据时,用户可以单击列标题,并对数据进行排序。并且可以只过滤要显示在某些行中的数据,例如用户修改过的所有数据。DataView允许限制要显示给用户的数据行,但不允许限制DataTable中的数据列。
例如,根据现有的DataTable创建DataView的代码如下:
创建好后,就可以改变DataView上的设置,当该视图显示在DataGrid中时,这些设置会影响要显示的数据,以及允许对这些数据进行的操作,具体说明如下。
设置AllowEdit=false表示在数据行上禁用所有列的编辑功能。
设置AllowNew=false表示禁用新行功能。
设置AllowDelete=false表示禁用除行的功能。
设置RowStateFilter只显示指定状态的行。(www.xing528.com)
设置RowFilter可过滤数据行。
注意
DataView不允许修改要显示的数据列,只允许修改要显示的数据行。
(1)通过数据过滤数据行
创建好DataView后,可以通过设置RowFilter属性来改变视图中的数据。RowFilter属性是一个字符串,可用做按照给定条件过滤数据的一种方式,该字符串的值就是过滤条件。其语法类似于一般SQL中的WHERE子句,但主要是对已经从数据库中选择出来的数据进行操作。
过滤子句的常用示例如表18-1所示。
表18-1 过滤子句的常用示例
在运行环境中,应尽可能在过滤表达式中使用与源列相匹配的数据类型。但如果提供了一个无效的过滤字符串,就会产生EvaluateException。
(2)根据状态过滤数据行
DataView中的每一行都有一个定义好的行状态,各状态值的具体说明如表18-2所示。
表18-2 DataView行状态值
过滤器不仅可以用于可视化的行,还可以用于这些行中列的状态。假如用户更新了数据行中的一列,该行就会在选择ModifiedOriginal或ModifiedCurrent时显示出来,但是其实际值可以是从数据库中选择出来的初值(如果选择了ModifiedOriginal),或者DataColumn中的当前值(如果选择了ModifiedCurrent)。
(3)对数据行进行排序
除了过滤数据外,有时还需要对DataView中的数据进行排序。可以在DataGrid控件中单击列标题,这会按照升序或降序的顺序对该列进行排序。但是控件只能对一列进行排序,而底层的DataView可以对多个列进行排序。
在对数据列进行排序时,既可以单击列的标题,也可以通过代码排序,DataGrid会显示一个箭头位图,表示对哪一列进行排序。DataView支持对列进行升序或降序排序,默认为升序。如果选择对DataView中的多个列进行排序,DataGrid就不会显示任何排序箭头。
网格中的每一列都是类型化的,其排序顺序不是基于列的字符串表示,而是基于实际的数据。如果DataGrid有一个日期列,要对它进行排序,网格就会按日期来进行排序,而不是按日期字符串来进行排序。
4.显示DataSet类数据
DataGrid主要用于显示DataSet中的数据,虽然它一次只能显示一个DataTable,但是可以浏览DataSet中的具体关系。在DataGrid控件的右上角有两个新图标,使用箭头可以允许用户导航回到父行,来显示上一页的内容。标题行显示父记录的细节,单击另一个按钮会隐藏或显示该箭头。
5.DataViewManager中显示数据
在DataViewManager中显示的数据与在DataSet中显示的相同。当为DataSet创建Data ViewManager时,会为每个DataTable创建一个单独的DataView,根据过滤条件或者行的状态改变显示出来的行。即使不希望过滤数据,也可以把DataSet包装到DataViewManager中进行显示,只有这样才能在修改源代码时使用更多的选项。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。