第8章 数据的排序、搜 索和过滤
数据访问技术—— ADO.NET 2.0 第1章: 数据库基础 第 6 章: 类型化DataSet 第 2 章: ADO.NET 2.0概述 第 3 章: 数据源连接 第 4 章: 在连接环境中获取数据 第 5 章: 构建DataSet 第 6 章: 类型化DataSet 第 7 章: 在断开连接的环境中编辑和更新数据 第 8章: 数据的排序、搜索和过滤 第 9 章: 事务 第 10 章: ADO.NET和XML 2
目标 本章学习目标: 通过DataTable对数据进行排序和搜索 掌握添加DataView到窗体的方法 运行时创建DataView 掌握在DataView 中创建calculated列的方法 进行DataView排序 掌握过滤DataView中的行的方法 根据主键值查询DataView 3
第8章 数据的排序、搜索和过滤 查看DataTable中的数据 DataView 对象 小结 实验 习题
查看DataTable中的数据 在行中定位: 代码示例C# 代码示例VB 查找多行 : 代码示例C# (1) 代码示例VB(1) 表达式:计算列 (部分小节的内容讲述如下)
查找多行的多媒体演示 多媒体演示
1 2 3 表达式:计算列 下面的示例将用到一个绑定到Windows窗体应用程序中的DataGridView的DataTable。 8.1.3 表达式:计算列 下面的示例将用到一个绑定到Windows窗体应用程序中的DataGridView的DataTable。 首先创建一个Windows窗体应用程序。并将其命名为“演示8.1”。 1 在窗体上放置一个DataGridView,确保将其Dock属性设置为 Fill。 2 在加载Form1时所调用的Form1_Load事件处理程序中,添加代码。 3
表达式:计算列 (续) 8.1.3 表达式:计算列 编译并运行程序。 4 代码示例C# 代码示例VB
第8章 数据的排序、搜索和过滤 查看DataTable中的数据 DataView 对象 小结 实验 习题 9
DataView 对象 DataView对象可以带来以下好处。 对于一个DataTable对象可以有多个数据视图,每一个数据视图都以一种不同的顺序和角度显示相应的表。 DataView可以通过Visual Studio 2005添加到窗体或者组件中,并设置其属性。这与DataTable的Select()方法不同,后者只能通过编程方式使用。
创建DataView 对象 8.2.1 通过Visual Studio 2005创建DataView 对象 拖曳一个DataGridView到窗体设计器中,再拖曳一个DataView控件到窗体设计器上,Visual Studio 2005把该控件添加到组件托盘上。 1
2 3 创建DataView 对象(续) 在“属性”窗口中,把DataView的(name)属性改为dvEmployees。 8.2.1 通过Visual Studio 2005创建DataView 对象 在“属性”窗口中,把DataView的(name)属性改为dvEmployees。 2 选择Table属性。单击其右侧的下拉箭头, 展开MySampleDataSet结点,选择“员工” 。 3
4 5 6 创建DataView 对象(续) 在“属性”窗口,把Sort属性改为“EmployeeID”。 8.2.1 通过Visual Studio 2005创建DataView 对象 在“属性”窗口,把Sort属性改为“EmployeeID”。 4 在窗体设计器中,选中名为dgvOrders 的DataGridView 控件。 5 在“属性”窗口,选择DataSource属性。 6
创建DataView 对象(续) 8.2.1 通过Visual Studio 2005创建DataView 对象 单击DataSource下拉箭头,展开其他数据源结点,展开Form1列表实例,选择dvEmployees。 7
创建DataView 对象(续) 8.2.1 通过Visual Studio 2005创建DataView 对象 按F5键运行程序。Visual Studio 2005在DataGridView中,按照员工编号的升序显示员工信息。 8 关闭程序。 9
创建DataView 对象的多媒体演示 多媒体演示
通过编程方式创建 DataView 对象 可以通过使用DataView所支持的三种构造函数重载来创建DataView。 第二种构造函数直接将DataView与DataTable相关联。 DataView 的第三种也是最后一种构造函数允许在一行代码中指定所有信息。它不仅可以指定表,而且还可以指定排序、搜索以及DataViewRowState筛选条件。
通过编程方式创建 DataView 对象 (续) RowFilter:此属性允许指定一个选择条件(类似于传入 DataTable 的 Select( ) 方法的条件),并允许筛选返回行。 Sort:此属性制定了组织视图中记录的表达式。此表达式包括排序操作的列名以及排序方向。 RowStateFilter:在对DataTable进行更改时,DataTable将把一个步骤中所做的更改保留在历史记录中。
通过编程方式创建 DataView 对象 (续) 搜索包含在DataView对象内的DataRowView的其他方法是使用Find()和FindRows()方法。 Find():与DataTable.Rows.Find()方法的工作方式类似,但是并不完全一样。 FindRows():允许返回与指定搜索条件相匹配的多个 DataRowView 对象。
1 创建一个Windows 窗体应用程序 btnLoad :数据装载 btnSort :数据排序 btnFilter :数据过滤 8.2.2 通过编程方式创建DataView 对象 在窗体设计器上放置一个 DataGridView 控件(dgView)以及4个按钮。 1 btnLoad :数据装载 btnSort :数据排序 btnFilter :数据过滤 btnFindRows :查找行
创建一个Windows窗体 应用程序(续) 8.2.2 通过编程方式创建DataView 对象 该窗体在“设计”视图中如下图所示。 2
3 4 5 创建一个Windows窗体 应用程序(续) 在项目中添加一个“数据集”文件。 8.2.2 通过编程方式创建DataView 对象 在项目中添加一个“数据集”文件。 3 按照我们在第6章介绍的方法创建一个TableAdapter。 4 在此示例中,dgView 将绑定到称为 EmployeeView 的 DataView,该 DataView 将基于 DataTable employeeTable。 5
创建一个Windows窗体 应用程序(续) 8.2.2 通过编程方式创建DataView 对象 编译并运行应用程序。 6
7 创建一个Windows窗体 应用程序(续) 8.2.2 通过编程方式创建DataView 对象 接下来,应用程序将尝试按照升序对 EmployeeBirthday 列的数据进行排序。在 btnSort 的事件处理程序中,添加下面的代码。 7 [C#] private void btnSort_Click(object sender, EventArgs e) { EmployeeView.Sort = "EmployeeBirthday ASC"; } [VB.NET] Private Sub btnSort_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnSort.Click EmployeeView.Sort = "EmployeeBirthday ASC" End Sub
创建一个Windows窗体 应用程序(续) 8.2.2 通过编程方式创建DataView 对象 编译并运行应用程序。 8
创建一个Windows窗体 应用程序(续) 8.2.2 通过编程方式创建DataView 对象 接下来,单击“数据过滤”按钮。 9
10 11 创建一个Windows窗体 应用程序(续) 最后,应用程序将根据所设定的排序键查找行。 编译并运行应用程序。 8.2.2 通过编程方式创建DataView 对象 最后,应用程序将根据所设定的排序键查找行。 10 编译并运行应用程序。 11
12 创建一个Windows窗体 应用程序(续) 再次运行应用程序。 代码示例C# 代码示例VB 8.2.2 通过编程方式创建DataView 对象 再次运行应用程序。 12 代码示例C# 代码示例VB
创建DataView 对象的多媒体演示 多媒体演示
将 DataView 转换为 DataTable ADO.NET 2.0 中值得一提的增强功能是 DataView 对象中新增的一个方法,该方法可基于 DataView 中可用的行轻松创建一个新的 DataTable。
第8章 数据的排序、搜索和过滤 查看DataTable中的数据 DataView 对象 小结 实验 习题 31
小结 8.3 小结 本章了解了针对断开数据的排序、搜索和过滤。这是ADO.NET非常重要的一个组成部分。
第8章 数据的排序、搜索和过滤 查看DataTable中的数据 DataView 对象 小结 实验 习题 33
实验 8.4 实验 参照实验手册,并在教师的指导下完成实验报告。 34
第8章 数据的排序、搜索和过滤 查看DataTable中的数据 DataView 对象 小结 实验 习题 35
习题 1.多选题: 下面关于DataTable和DataView的说法_____是正确的 。 8.5 习题 1.多选题: 下面关于DataTable和DataView的说法_____是正确的 。 A. 一个DataTable表示内存中的关系数据的一个表 B. 可以用现有的数据源来填充DataTable C. DataView表示DataTable中数据子集的对象 D. 可以使用DataView联结两个DataTable对象之间的数据 36
习题(续) 8.5 习题 2. 请简述DataTable和DataView之间有何不同 。 37
习题(续) 8.5 习题 3. 使用 DataView 控件来删除或添加一行数据,程序代码如下。 增添一个名为“Customers“的表,然后增添CustomerID和CompanyName字段,并分别赋值“ABCDE”和“ABC Products”。请分别使用Visual Studio和C#语言实现,第04行中是默认值和第06行中为CustomerID和CompanyName字段赋值。 Visual Basic 01 Dim custTable As DataTable = custDS.Tables("Customers") 02 Dim custView As DataView = custTable.DefaultView 03 custView.Sort = "CompanyName" 04 custView.AllowDelete =__________ 05 Dim newDRV As DataRowView = custView.AddNew() 06 ______________ 07 ______________ 08 newDRV.EndEdit() 38
习题(续) 8.5 习题 C# 01 DataTable custTable = custDS.Tables["Customers"]; 02 DataView custView = custTable.DefaultView; 03 custView.Sort = "CompanyName"; 04 custView.AllowDelete = _____________ 05 DataRowView newDRV = custView.AddNew(); 06 _______________ 07 _______________ 08 newDRV.EndEdit(); 39
习题(续) 8.5 习题 4. 使用DataView 控件的方法,从填充的Products表中过滤UnitsInStock <= ReorderLevel的数据,并且按照SupplierID, ProductName进行排序。请使用Visual和C#两种语言分别实现此功能。 40
习题(续) 8.5 习题 5. 创建一个显示 GridView 的 Web 窗体。GridView 的数据源是名为 dsOrders 的数据集。该数据集包含名为 Orders 和 OrderDetails 的两个数据表。使用以下代码段创建这两个数据表之间的关系。(所包含的行号仅供参考。) 01 dtOrders = dsOrders.Tables["Orders"]; 02 dtOrderDetails = dsOrders.Tables["OrderDetails"]; 03 colParent = dtOrders.Columns["OrderID"]; 04 colChild = dtOrderDetails.Columns["ParentOrderID"]; 05 dsOrders.Relations.Add("Rel1", colParent, colChild, false); 请问 05 行中出现异常的原因。 41
习题(续) 8.5 习题 6. 如果不想计算所有价格的总和,而是希望得到不高于 700 的价格之和,请使用合适的聚合函数来填充下面的程序语句块, 实现此功能 。 productsTable. ______1___ (“ _____2____ (Price)", "Price < =700") 42