DataView 类
2008-11-19 13:41 LvSir 阅读(511) 评论(0) 收藏 举报更新:2007 年 11 月
表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。
程序集: System.Data(在 System.Data.dll 中)
语法 Public Class DataView _ Inherits MarshalByValueComponent _ Implements IBindingListView, IBindingList, IList, ICollection, _ IEnumerable, ITypedList, ISupportInitializeNotification, ISupportInitialize
Dim instance As DataView
public class DataView : MarshalByValueComponent, IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ISupportInitializeNotification, ISupportInitialize
public ref class DataView : public MarshalByValueComponent, IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ISupportInitializeNotification, ISupportInitialize
public class DataView extends MarshalByValueComponent implements IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ISupportInitializeNotification, ISupportInitialize
public class DataView extends MarshalByValueComponent implements IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ISupportInitializeNotification, ISupportInitialize
备注 DataView 的一个主要功能是允许在 Windows 窗体和 Web 窗体上进行数据绑定。
另外,可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如,一个控件可能绑定到显示表中所有行的 DataView,而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如,如果希望在表上创建自定义视图,请在 DefaultView 返回的 DataView 上设置 RowFilter。
若要创建数据的筛选和排序视图,请设置 RowFilter 和 Sort 属性。然后,使用 Item 属性返回单个 DataRowView。
还可使用 AddNew 和 Delete 方法从行的集合中进行添加和删除。在使用这些方法时,可设置 RowStateFilter 属性以便指定只有已被删除的行或新行才可由 DataView 显示。
说明: |
|---|
|
如果不显式指定 DataView 的排序条件,将按 DataView 的相应 DataRow 在 DataTable.RowsDataRowCollection 中的索引来对 DataView 中的 DataRowView 对象进行排序。 |
LINQ to DataSet 允许开发人员使用 LINQ 来创建对 DataSet 的复杂且功能强大的查询。LINQ to DataSet 查询返回 DataRow 对象的枚举,但在绑定方案中不易使用。DataView 可以从 LINQ to DataSet 查询创建,并具有该查询的筛选和排序特征。通过提供基于 LINQ 表达式的筛选和排序(可执行比基于字符串的筛选和排序更复杂、功能更强大的筛选和排序操作),LINQ to DataSet 可扩展 DataView 的功能。有关更多信息,请参见数据绑定和 LINQ to DataSet。
示例 下面的示例创建一个具有一个列和五个行的 DataTable。创建两个 DataView 对象,并针对每个对象设置 RowStateFilter 以显示表数据的不同视图。然后打印这些值。
Private Sub DemonstrateDataView() ' Create one DataTable with one column. Dim table As DataTable = New DataTable("table") Dim colItem As DataColumn = New DataColumn("item", _ Type.GetType("System.String")) table.Columns.Add(colItem) ' Add five items. Dim NewRow As DataRow Dim i As Integer For i = 0 To 4 NewRow = table.NewRow() NewRow("item") = "Item " & i table.Rows.Add(NewRow) Next table.AcceptChanges() ' Create two DataView objects with the same table. Dim firstView As DataView = New DataView(table) Dim secondView As DataView = New DataView(table) ' Change the values in the table. table.Rows(0)("item") = "cat" table.Rows(1)("item") = "dog" ' Print current table values. PrintTableOrView(table, "Current Values in Table") ' Set first DataView to show only modified versions of original rows. firstView.RowStateFilter = DataViewRowState.ModifiedOriginal ' Print values. PrintTableOrView(firstView, "First DataView: ModifiedOriginal") ' Add one New row to the second view. Dim rowView As DataRowView rowView = secondView.AddNew() rowView("item") = "fish" ' Set second DataView to show modified versions of ' current rows, or New rows. secondView.RowStateFilter = DataViewRowState.ModifiedCurrent _ Or DataViewRowState.Added ' Print modified and Added rows. PrintTableOrView(secondView, _ "Second DataView: ModifiedCurrent or Added") End Sub Overloads Private Sub PrintTableOrView( _ ByVal view As DataView, ByVal label As String) Console.WriteLine(label) Dim i As Integer For i = 0 To view.count - 1 Console.WriteLine(view(i)("item")) Next Console.WriteLine() End Sub Overloads Private Sub PrintTableOrView( _ ByVal table As DataTable, ByVal label As String) Console.WriteLine(label) Dim i As Integer For i = 0 To table.Rows.Count - 1 Console.WriteLine(table.Rows(i)("item")) Next Console.WriteLine() End Sub
private void DemonstrateDataView() { // Create one DataTable with one column. DataTable table = new DataTable("table"); DataColumn colItem = new DataColumn("item", Type.GetType("System.String")); table.Columns.Add(colItem); // Add five items. DataRow NewRow; for(int i = 0; i <5; i++) { NewRow = table.NewRow(); NewRow["item"] = "Item " + i; table.Rows.Add(NewRow); } // Change the values in the table. table.Rows[0]["item"]="cat"; table.Rows[1]["item"] = "dog"; table.AcceptChanges(); // Create two DataView objects with the same table. DataView firstView = new DataView(table); DataView secondView = new DataView(table); // Print current table values. PrintTableOrView(table,"Current Values in Table"); // Set first DataView to show only modified // versions of original rows. firstView.RowStateFilter=DataViewRowState.ModifiedOriginal; // Print values. PrintTableOrView(firstView,"First DataView: ModifiedOriginal"); // Add one New row to the second view. DataRowView rowView; rowView=secondView.AddNew(); rowView["item"] = "fish"; // Set second DataView to show modified versions of // current rows, or New rows. secondView.RowStateFilter=DataViewRowState.ModifiedCurrent | DataViewRowState.Added; // Print modified and Added rows. PrintTableOrView(secondView, "Second DataView: ModifiedCurrent | Added"); } private void PrintTableOrView(DataTable table, string label) { // This function prints values in the table or DataView. Console.WriteLine("\n" + label); for(int i = 0; i<table.Rows.Count;i++) { Console.WriteLine("\table" + table.Rows[i]["item"]); } Console.WriteLine(); } private void PrintTableOrView(DataView view, string label) { // This overload prints values in the table or DataView. Console.WriteLine("\n" + label); for(int i = 0; i<view.Count;i++) { Console.WriteLine("\table" + view[i]["item"]); } Console.WriteLine(); }
下面的示例根据 LINQ to DataSet 查询创建按应付款总额排序的在线订单的 DataView:
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader") Dim query = _ From order In orders.AsEnumerable() _ Where order.Field(Of Boolean)("OnlineOrderFlag") = True _ Order By order.Field(Of Decimal)("TotalDue") _ Select order Dim view As DataView = query.AsDataView() bindingSource1.DataSource = view
DataTable orders = dataSet.Tables["SalesOrderHeader"]; EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable() where order.Field<bool>("OnlineOrderFlag") == true orderby order.Field<decimal>("TotalDue") select order; DataView view = query.AsDataView(); bindingSource1.DataSource = view;
继承层次结构
平台 Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360
.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。
版本信息
另请参见
说明:
浙公网安备 33010602011771号