Visual Studio 2010 (C#) Windows数据库项目开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4 课程数据维护

3.4.1 设计课程信息窗体

(1)在“解决方案资源管理器”中双击“dsXk.xsd”编辑数据集。

(2)在“服务器资源管理器”中展开“数据连接”下的“home\sqlexpress.Xk.dbo”,展开“表”,将“Course”拖放到数据集的设计界面中。

(3)在项目中添加新的Windows窗体,命名为“frmCourse”。

(4)将窗体拉到适当大小,设置窗体的Text属性为“课程信息”。

(5)打开“数据源”,如果看不到,可选择“数据”菜单下的“显示数据源”命令。

(6)如图3-49所示,在“数据源”中确保Course左边的图标为“详细信息”状态,如果不是,可单击下拉按钮后选择“详细信息”选项。

图3-49 设置Course为“详细信息”方式

(7)在“数据源”中拖放“Course”到frmCourse窗体中。

(8)在主窗体中加入调用课程信息窗体的代码。在“解决方案资源管理器”中双击“frmMain”,打开该窗体的设计界面。双击“课程信息”菜单,为该菜单编写Click事件,代码如下。

private void课程信息ToolStripMenuItem_Click(object sender, EventArgs e)
{
     frmCourse f = new frmCourse();
     f.MdiParent = this;
     f.Show();
}

(9)切换到frmCourse的设计界面,如图3-50所示,调整各Label的Text属性,使界面更为友好。

图3-50 设置各Label的Text属性

(10)在主窗体中单击“课程信息”菜单,运行效果如图3-51所示。

图3-51 课程信息窗体的运行效果

3.4.2 维护课程数据

(1)删除courseBindingNavigator中的按钮。如图3-52所示,右击相应图标,选择“删除”命令即可。

我们保留前后导航的命令,以便自己控制增、删、改等操作。

图3-52 删除courseBindingNavigator中的按钮

(2)为方便后面代码控制,我们将窗体上的Label和TextBox控件都放入一个GroupBox控件中。

在“工具箱”的“容器”面板中将“GroupBox”控件拖放到窗体中。调整一下大小,使其能容纳准备放进来的控件。设置GroupBox的Text属性为空(清除掉原内容),将Name属性设置为“gbEdit”,现在的界面如图3-53所示。

图3-53 放置GroupBox

(3)如图3-54所示,将相关的Label和Text拖放到GroupBox中,并适当调整GroupBox及窗体的大小和位置。

图3-54 将Label和Text拖放到GroupBox中

(4)在“工具箱”的“菜单和工具栏”面板中,将“ToolStrip”控件拖放到窗体中。

(5)如图3-55所示,单击“ToolStrip任务”标志,设置其Dock属性为“Bottom”。

图3-55 设置ToolStrip的Dock属性为“Bottom”

(6)将该ToolStrip的Name属性设置为“tsControl”。

(7)如图3-56所示,在ToolStrip中添加5个Button。

(8)为ToolStrip中新添加的5个Button指定Image,读者可在资源文件夹中找一些图片,也可指定为自己喜欢的图片。

(9)将5个Button的Text属性分别指定为“新增”、“修改”、“删除”、“保存”、“放弃”。

(10)将5个Button的DisplayStyle属性都设置为“ImageAndText”。

(11)将5个Button的Name属性分别设置为tsbInsert、tsbEdit、tsbDelete、tsbSave、tsbCancel。

(12)将“保存”、“放弃”两个Button和GroupBox的Enabled属性设置为“False”。

图3-56 在ToolStrip中添加5个Button

这5个按钮以后将分别完成新增、修改、删除、保存、放弃的任务,现在设计好的界面如图3-57所示。

图3-57 添加增删改等按钮

(13)将GroupBox(gbEdit)的Enabled属性设置为“False”,表示最开始GroupBox里面的控件都设置为不可编辑状态。

(14)切换到Course的代码页,编写如下自定义方法如下。该方法将数据导航条、GroupBox、新增、修改、删除、保存、放弃的Enabled状态取反,即原来为“True”的将变为“False”,原来为“False”的将变为“True”。

private void ChangeEnabledState()
{
     courseBindingNavigator.Enabled = !courseBindingNavigator.Enabled;
     gbEdit.Enabled = !gbEdit.Enabled;
     foreach (ToolStripButton b in tsControl.Items)
     {
          b.Enabled = !b.Enabled;
     }
}

(15)双击“新增”按钮,生成Click事件框架,为其编写代码如下。

private void tsbInsert_Click(object sender, EventArgs e)
{
     ChangeEnabledState();
     courseBindingSource.AddNew();
     couNoTextBox.Focus();
}

本段代码功能如下。

① 切换Enabled状态。

② 调用courseBindingSource的AddNew方法,在数据集中添加一条新的数据行。

③ 将光标定位到“课程代码”文本框中。

(16)类似地,为“修改”按钮编写其Click事件代码如下。

private void tsbEdit_Click(object sender, EventArgs e)
{
     ChangeEnabledState();
     couNoTextBox.Focus();
}

本段代码功能如下。

① 切换Enabled状态,这样就已经可以修改当前数据行的数据了。

② 将光标定位到“课程代码”文本框中。

(17)为“保存”按钮编写其Click事件代码如下。

private void tsbSave_Click(object sender, EventArgs e)
{
     ChangeEnabledState();
     this.Validate();
     this.courseBindingSource.EndEdit();
     this.tableAdapterManager.UpdateAll(this.dsXk);
}

本段代码功能如下。

① 切换Enabled回到原来的状态。

② 验证数据的合法性。

③ 结束编辑。

④ 将数据集中的数据更新到数据库中。

(18)为“放弃”按钮编写其Click事件代码如下。

private void tsbCancel_Click(object sender, EventArgs e)
{
     ChangeEnabledState();
     this.courseBindingSource.CancelEdit();
}

本段代码功能如下。

① 切换Enabled回到原来的状态。

② 取消所做的修改。

(19)为“删除”按钮编写其Click事件代码如下。

private void tsbDelete_Click(object sender, EventArgs e)
{
     if (courseBindingSource.Current != null)
     {
           if (MessageBox.Show("确实要删除吗?", "确认", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
           {
                courseBindingSource.RemoveCurrent();
                this.tableAdapterManager.UpdateAll(this.dsXk);
           }
     }
}

本段代码功能如下。

① 先判断当前是否有数据,如果有,询问用户是否确认,如果确认,则移除当前行。

② 将数据集的变化更新到数据库中。

(20)在主窗体中单击“课程信息”菜单,运行效果如图3-58所示。

图3-58 课程信息运行效果

(21)在不违反数据库相关约束规则的前提下,可做如下测试。

① 单击“新增”按钮,如图3-59所示,注意各控件的Enabled状态发生了变化。我们就是以此来控制用户的操作方式的。

图3-59 添加数据

② 自行录入测试数据,单击“保存”按钮,在数据库中验证是否加入了该数据。注意各控件的Enabled状态回到了原来的状态。

③ 单击“修改”按钮修改数据,单击“保存”按钮,在数据库中验证是否修改了该数据。

④ 单击“删除”按钮,如图3-60所示,出现确认删除对话框,单击“是”按钮,在数据库中验证是否删除了该数据。

图3-60 确认是否删除