——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
DataGrid主要用于显示DataSet中的数据和以前的示例一样DataGrid一次只能显示一个DataTable但在下面的示例DataSourceDataSet中可以浏览DataSet中的关系下面的代码可以根据Northwind数据库中的Customers和Orders表生成这样一个DataTable这个示例从两个DataTable中加载数据然后在这些表之间创建了一个关系CustomerOrders
string source =server=(local)\\NetSDK; +
uid=QSUser;pwd=QSPassword; +
database=northwind;
string orders = SELECT * FROM Orders;
string customers = SELECT * FROM Customers;
SqlConnection conn = new SqlConnection(source);
SqlDataAdapter da = new SqlDataAdapter(orders conn);
DataSet ds = new DataSet();
daFill(ds Orders);
da = new SqlDataAdapter(customers conn);
daFill(ds Customers);
dsRelationsAdd(CustomerOrders
dsTables[Customers]Columns[CustomerID]
dsTables[Orders]Columns[CustomerID]);
创建好后通过调用SetDataBinding就可以把DataSet绑定到DataGrid上
dataGridSetDataBinding(ds Customers);
这样会得到如所示的屏幕图
图
注意与本章前面的DataGrid不同每个记录的左边都有一个+号这表示DataSet在customers 和orders表之间有一个可导航的关系在代码中可以定义许多这类关系
单击+号就会显示关系列表(如果关系已经显示出来单击+号就会隐藏该关系)单击关系名就可以定位到链接的记录上如图所示在本例中是列出选中客户的所有订单
图
DataGrid控件的右上角还包含两个新图标箭头允许用户可以导航回父行显示上一页的内容标题行显示父记录的细节单击另一个按钮会隐藏或显示该箭头
在DataViewManager中显示数据
DataViewManager中显示的数据与DataSet中显示的数据相同但在为DataSet创建DataViewManager时会为每个DataTable创建一个单独的 DataView根据过滤条件或者行的状态改变显示出来的行如上面的DataView示例所示即使不希望过滤数据也可以把DataSet包装到 DataViewManager中以进行显示因为这样在修改源代码时可以使用更多的选项
下面的示例根据上一例中的DataSet 创建一个DataViewManager然后改变Customers表中的DataView使之只显示来自英国的客户
DataViewManager dvm = new DataViewManager(ds);
dvmDataViewSettings[Customers]RowFilter = Country=UK;
dataGridSetDataBinding(dvm Customers);
如图所示为DataSourceDataViewManager示例代码的运行结果
图