![Visual Studio 2010 (C#) Windows数据库项目开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/367/654367/b_654367.jpg)
3.2 班级数据维护
3.2.1 修改数据集并添加到班级表
(1)如图3-17所示,在“解决方案资源管理器”中双击“dsXk.xsd”项目编辑数据集。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-17.jpg?sign=1738843236-z4X21yETKJMu9iZeHDFETHm1pm5L6iZQ-0-9eeed679bebc4f152e92dbd6cf102625)
图3-17 编辑数据集
(2)如图3-18所示,在“服务器资源管理器”(如果看不到,可单击“视图”菜单下的“服务器资源管理器”命令)中展开“数据连接”下的“home\sqlexpress.Xk.dbo”,展开“表”,将“Class”拖放到数据集的设计界面中。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-18.jpg?sign=1738843236-0PiwXOln8lSnF0YSDbMY8mOLeA2zyZkF-0-3d6451936af03c1edfaf7360e4fb784f)
图3-18 将Class表拖放到数据集中
(3)系统将根据数据库中主外键的关系在数据集中添加对应的关系。
在这里我们可看到数据集的Class数据表和Department数据表之间有一个箭头,双击箭头可查看该关系的详细设置,如图3-19所示。
尽管数据集和数据库之间通常是具备对应关系的,但两者之间是可以独立设计的。当然,通常我们不需要这样做。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-19.jpg?sign=1738843236-OfgJETpIYM3TQw9B1Xfz4JiqQrpFUeev-0-6d074b258b15892f0fffc33cafc10419)
图3-19 数据集中表之间的关系
3.2.2 设计班级信息窗体并维护数据
(1)在项目中添加新的Windows窗体,命名为“frmClass”。
(2)将窗体拉到适当大小,设置窗体的Text属性为“班级信息”。
(3)打开“数据源”,如果看不到,可单击“数据”菜单下的“显示数据源”命令。
(4)在“数据源”中确保Class左边的图标为DataGridView状态。如果不是,可单击Class右侧的下拉按钮,选择“DataGridView”选项。
(5)在“数据源”中拖放“Class”到frmClass窗体中。
(6)在主窗体中加入调用Class窗体的代码。
在“解决方案资源管理器”中双击frmMain项目,打开该窗体的设计界面。双击“班级信息”菜单,为该菜单编写Click事件,代码如下。
private void班级信息ToolStripMenuItem_Click(object sender, EventArgs e) { frmClass f = new frmClass(); f.MdiParent = this; f.Show(); }
(7)在主窗体中单击“班级信息”菜单,现在的运行效果如图3-20所示。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-20.jpg?sign=1738843236-IcmW60n6ruEcjXQRz6cJxQX9p5UieGdk-0-b1ff7bd2266bb5721d447c5df7ba5d20)
图3-20 班级信息的运行效果
下面我们进一步完善系统。班级所在的系部现在显示的是系部代码,如果显示为对应的班级名称,这样用户才感觉更直观。修改数据时,从系部名称里挑选一个系部也比直接输入系部代码方便,而且也不会出错,下面我们就将做这方面的改进。
(8)如图3-21所示,单击“DataGridView任务”,选择“编辑列”选项。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-21.jpg?sign=1738843236-mrwX3PEMoq7EJRUmKILbn43Pz03FEMrI-0-aa88a966e703dc39df7c400a67a70cdf)
图3-21 编辑列
(9)如图3-22所示,在左侧选定的列中选中“DepartNo”,在右侧绑定的属性中,设置“ColumnType”为“DataGridViewComboBoxColumn”,表明该列显示为下拉列表。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-22.jpg?sign=1738843236-P8sMtOjEFYu8J2RpXJeqxDM9qtMnpugo-0-580603e4c54299322577c73c50a0c98a)
图3-22 设置列显示为下拉列表
(10)如图3-23所示,设置“DataSource”为“Department”。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-23.jpg?sign=1738843236-1gtEQN90lwjJLb63MlYq4MsdX34CxhXs-0-c325e7447f42f59bc0da80b087c3ca9d)
图3-23 设置DataSource
如图3-24所示,经过这样的操作,从图中间最下方可以看到,系统自动添加了一个departmentBindingSource控件。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-24.jpg?sign=1738843236-CcOBbfS64wmLIa2Tx1XCYKygcPp1qrVA-0-c50f3d81761dde1fef352a1a902e8d30)
图3-24 系统自动添加了一个departmentBindingSource控件
再次单击“DataSource”下拉按钮时选择“departmentBindingSource”选项即可。如果继续像图3-23那样操作的话,系统会再添加一个类似departmentBindingSource的控件,这样不太好。
(11)如图3-25所示,设置“DisplayMember”为“DepartName”。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-25.jpg?sign=1738843236-Cy883LiFgRPQ0iEZrG4mWzQ0RRjy1lPY-0-4b0d80f343bf035701b58fcfb0d6f957)
图3-25 设置DisplayMember
(12)如图3-26所示,设置“ValueMember”为“DepartNo”。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-26.jpg?sign=1738843236-sEM2UViEq8kc9nPs9ZlrYL5ZgOQX7Ryf-0-6f25821f1588cc35d06b0f760428c3fd)
图3-26 设置ValueMember
以上几步操作的意思是:下拉列表中将显示为系部名称,系部表中有很多系部,系统将根据班级表中的DepartNo在Department表中找到对应的DepartName显示出来;更新数据时,也会将下拉列表中我们看到的DepartName对应的DepartNo更新到Class表中。
(13)调整列标题分别为“班级代码”、“所在系部”、“班级名称”,如图3-27所示。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-27.jpg?sign=1738843236-DjBeorV0SV5qiRlwEI5ocNoQrwYIcfoD-0-47bad4fc65a9762c104340231ffbf2eb)
图3-27 设置列标题
(14)如图3-28所示,读者可自行设置各列的宽度,即“Width”属性的值。
需要注意的是,DataGridView中列的宽度不能通过拖拉的方式进行调整。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-28.jpg?sign=1738843236-xt60i9kgnmtAeFPaM5fdckGjp7VWtLBr-0-a256ffde157a6b2cd1ebbd20bbb5945d)
图3-28 设置列宽
(15)如图3-29所示,设置“所在系部”的“DisplayStyle”为“Nothing”。此样式在浏览时为普通的文本框,进入编辑模式时变为下拉列表框。
默认的“DropDownButton”则不管是浏览还是编辑时都显示为下拉列表框。
编者认为设为“Nothing” 的情形更多一些。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-29.jpg?sign=1738843236-NnXpr05GSx7UMbstCJA44uxp8ginXr7q-0-f6ca2d461fddb682762483c0f04cdfe9)
图3-29 设置DisplayStyle
(16)单击“确定”按钮完成列的设置。
(17)在主窗体中单击“班级信息”菜单,现在的运行效果如图3-30所示。可以看到“所在系部”列显示为文本框。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-30.jpg?sign=1738843236-aWDlKvmXe2y2UVYlZhqD6FoKMSAMZK4i-0-8b6e5de3ff8b55984bf4b97ebf8b39a3)
图3-30 “班级信息”窗体的运行效果
(18)如图3-31所示,随便在一个数据行单击“所在系部”下的单元格,可以看到出现下拉按钮,以让用户在下拉列表中选择新的值。
![](https://epubservercos.yuewen.com/479A39/3590270304425901/epubprivate/OEBPS/Images/Figure-0003-31.jpg?sign=1738843236-6qx1gJxjncqJL9unx9wFzIGnOUGW3Xag-0-b113523a7b94fe88cd1b2861687e9507)
图3-31 “所在系部”列编辑单元格时显示为下拉列表框
(19)在不违反数据库相关约束规则的前提下,可做如下测试。
① 添加一条班级记录,其中系部可在下拉列表中进行选择,单击“保存”按钮,在数据库中验证是否加入了该数据。验证一下DepartNo是否为下拉列表中选择的DepartName对应的DepartNo。
② 修改刚添加的记录,单击“保存”按钮,在数据库中验证是否修改了该数据。
③ 删除刚添加的记录,单击“保存”按钮,在数据库中验证是否删除了该数据。