数据的排序、搜索和过滤

Download Report

Transcript 数据的排序、搜索和过滤

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