【CSDN】【VB.NET中最简单ADO.NET问题,请求帮忙】

drillmaster2 2004-02-03 12:35:27
问题描述:
  使用SQL SERVER数据库中的数据库Northwind,在窗体中加入两个DataGrid
一个显示orders表,一个显示order Details表。现在要实现在一个有orders表记录的Datagrid中单击某一行,在另一个DataGrid中显示对应的order details表中相应的记录。如何做呀?

   我做的步骤是在服务器资源管理器中新建一个数据连接到northwind,然后拖这两个表到窗体中,然后生成数据集,并在窗体load事件中
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SqlDataAdapter1.Fill(DataSet11, "Orders")
SqlDataAdapter2.Fill(DataSet11, "Order Details")
End Sub

接下来呢,怎么做?
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lansingcy 2004-02-03
  • 打赏
  • 举报
回复
接下来呢,建立关系,把主表和明细表关联起来
孟子E章 2004-02-03
  • 打赏
  • 举报
回复
http://www.asp.net/ControlGallery/default.aspx?Category=16&tabindex=2
http://www.codeproject.com/aspnet/masterdetailgrid.asp
http://dotnet.aspx.cc/ShowDetail.aspx?id=149E5DD7-3B32-461e-ACC6-51D1652E6746
msd88 2004-02-03
  • 打赏
  • 举报
回复
在本演练中,将创建表之间的关系。然后可以使用 Windows 窗体的数据绑定功能来利用此关系。
若要完成本演练,您需要:
访问带有 Pubs SQL Server 示例数据库的服务器。
演练被分成若干较小的部分:
1、创建项目和窗体
2、创建和配置数据集
与 Visual Studio 中的大多数数据访问方案一样,您将要用到数据集。数据集是一个保存您想要使用的记录的容器(缓存)。
使用向导创建数据适配器。该适配器包含用于读取和写入数据库信息的 SQL 语句。该向导帮助您定义所需的 SQL 语句。如有必要,该向导还创建与数据库的连接。
生成数据集架构。在本过程中,您将让 Visual Studio 基于您正在访问的表和列创建一个新的数据集类。在生成数据集类时,您还将向窗体中添加该类的一个实例。
生成数据集之后,它将包含 Publishers 表和 Titles 表,这两个表均来自 SQL Server 中的标准 Pubs 数据库。这两个表有一种隐式关系:pub_id 字段既是 Publishers 表的主键,又是 Titles 表的外键。可以将该隐式关系转换为窗体上的控件可以利用的显式关系。

3、配置数据连接和数据适配器
将需要两个数据适配器,一个从 Publishers 表获取数据,另一个从 Titles 表获取数据。
4、创建数据连接和数据适配器
从“工具箱”的“数据”选项卡中,将 OleDbDataAdapter 对象拖到窗体上。
“数据适配器配置向导”启动,它将帮助您创建连接和适配器。

在第二个窗格中,创建或选择一个指向 SQL Server Pubs 数据库的连接。
在第三个窗格中,指定您要使用 SQL 语句来访问数据库。
在第四个窗格中创建以下 SQL 语句:
SELECT pub_id, pub_name
FROM publishers
向导完成后,您将获得一个连接(在 Visual Basic 中为 OleDbConnection1,该连接包含与如何访问数据库有关的信息。您还将拥有一个数据适配器oleDbDataAdapter1,其中包含从 Publishers 表获取信息的 SQL 语句。

5、将第二个 OleDbDataAdapter 对象拖到窗体上。
“数据适配器配置向导”再次启动。
重复第 2 步,其中有以下差异:
在第二个窗格中,选择上次所使用或创建的同一连接。
在第四个窗格中,创建下列 SQL 语句来访问 Titles 表:
SELECT title_id, title, pub_id, price
FROM titles
注意 必须包含 pub_id 列。
在 Visual Basic 中,向导向窗体中添加 OleDbDataAdapter2。

6、生成数据集
从“数据”菜单中选择“生成数据集”。
选择“新建”选项,将该数据集命名为 dsPublishersTitles。
在“选择要添加到数据集中的表”下面的列表中,确保选择了“Publishers”和“Titles”。

选中“将此数据集添加到设计器”,然后单击“确定”。
Visual Studio 生成一个类型化数据集类(DsPublishersTitles 或 dsPublishersTitles)和定义该数据集的架构。您将在“解决方案资源管理器”中看到新架构(.xsd 文件)。
创建数据集表之间的关系
数据集包含两个表,您知道这两个表均具有一对多关系。但是,数据集是一个被动容器(它不是实际的数据库),不能利用表之间的隐含关系。因此,您将创建数据关系对象以使该关系成为显式关系。
创建表之间的关系

在解决方案资源管理器中,双击刚刚创建的数据集的架构(名为 DsPublishersTitles.xsd 或 dsPublishersTitles.xsd)。
“XML 设计器”在“架构”视图中打开,显示数据集内的两个表。
从“工具箱”的“XML 架构”选项卡中,将 Relation 对象拖到 Titles 表(子表)上。
“编辑关系”对话框打开,其中带有从这两个表中派生的默认值。
确认在“编辑关系”对话框中设置了下列值。设置 值
名称 publisherstitles
因为随后需要知道该名称,所以,如果更改了该名称,则务必记录新名称。

父元素 Publishers
子元素 Titles
键字段 pub_id
外键字段 pub_id
只创建外键约束 (未选中)

单击“确定”关闭“编辑关系”对话框。
在“XML 设计器”中,这两个表之间显示一个关系图标。如果需要更改关系设置,则可以右击相应的关系,选择“编辑关系”。
保存该架构并关闭 XML 设计器。

此刻,为执行从数据库获取信息并转移到数据集的操作所需的全部设置均已完成。可以向窗体添加显示数据的控件了。

添加显示数据的控件
在 ListBox 控件中显示出版商
ListBox 控件显示出版商名称。该控件是一个复杂绑定控件,即,它可同时显示多个记录。

向窗体添加显示出版商的绑定 ListBox 控件

返回到当您创建该项目时已打开的默认窗体 (Form1)。如果尚未这样做,请单击当前窗口顶部的选项卡以切换到窗体设计器。
从“工具箱”的“Windows 窗体”选项卡中,将 ListBox 控件拖到窗体上。
在 DataSource 属性中,选择 DsPublishersTitles1 或 dsPublishersTitles1 作为数据源。
在 DisplayMember 属性中,显示下拉列表。选择“Publishers”,展开“Publishers”节点,然后选择“pub_name”。
完成后,DisplayMember 属性应显示 publishers.pub_name。
设置这两个属性将 ListBox 控件绑定到 Publishers 表的出版商名称字段。
如果愿意,在列表框前面添加一个标签来标识它。
在 DataGrid 控件中显示书名
每个出版商均可拥有多个书名。因此,您想使用一个不仅可显示多个记录,也可显示多列的控件来显示书名。DataGrid 控件是个不错的选项。
您并不将网格绑定到 Titles 表(您可能猜测要这样做),而是绑定到在前面创建的、建立 Publishers 和 Titles 之间关系的数据关系对象。该数据关系对象作为 Publishers 表的一个属性公开。在该窗体运行时,只要定位到新的出版商(通过在列表框中选择该出版商),窗体的数据绑定框架就会查询该数据关系对象以返回相应的明细记录。

向窗体添加显示书名的绑定 DataGrid 控件

从“工具箱”的“Windows 窗体”选项卡中,将 DataGrid 控件拖到窗体上。
在“属性”窗口中,将 DataSource 属性设置为 DsPublishersTitles1 或 dsPublishersTitles1。
将 DataMember 属性设置为 publishers.publisherstitles。
设置这两个属性将网格绑定到关系对象,以便网格始终包含当前出版商的子记录。

调整网格的大小,以便可以看到所有列。更改其高度以便能够看到多个书名记录。
填充数据集
尽管窗体上的控件绑定到所创建的数据集,但是,数据集本身不会自动被填写。相反,您必须使用几行代码,在初始化窗体时运行代码来填充数据集。

填充数据集
双击窗体创建其 Load 事件的处理程序。
在该方法中,清除您创建的数据集,然后调用两个数据适配器的 Fill 方法,同时将每一调用传递给要填充的数据集。
下面的示例显示完整的方法:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
DsPublishersTitles1.Clear()
OleDbDataAdapter1.Fill(DsPublishersTitles1)
OleDbDataAdapter2.Fill(DsPublishersTitles1)
End Sub

测试
现在可以测试该窗体,确保它以所需方式显示数据。
在显示该窗体后:
检查列表框 (ListBox) 控件显示出版商名称。
选择不同的出版商,确认网格中显示正确的书名(且只有正确的书名)。
zzxlovezzy1 2004-02-03
  • 打赏
  • 举报
回复
只要在vs.net 中建立了两个表的关系,你只要绑定了主表,子表会自动显示
LFreeX 2004-02-03
  • 打赏
  • 举报
回复
http://dotnet.aspx.cc/ShowDetail.aspx?id=149E5DD7-3B32-461e-ACC6-51D1652E6746
在dataset中添加关系
zag 2004-02-03
  • 打赏
  • 举报
回复
哈哈,楼上的实现方法最简单。
Montaque 2004-02-03
  • 打赏
  • 举报
回复
新建一个项目,右键-》添加一个data form wizard。
他会自动生成

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧