1、1李德奇李德奇 主编主编第十八讲多窗格数据修改窗体实例多窗格数据修改窗体实例 大连理工大学出版社大连理工大学出版社2教学目标教学目标l 掌握多窗格窗体的设计过程掌握多窗格窗体的设计过程l 掌握掌握SplitterSplitter控件与控件与PanelPanel控件的使用控件的使用l 完成多窗格数据修改窗体实例的程序编写完成多窗格数据修改窗体实例的程序编写3教学内容教学内容一、多窗格数据修改窗体的功能和用户界面一、多窗格数据修改窗体的功能和用户界面二、多窗格数据修改窗体的设计步骤二、多窗格数据修改窗体的设计步骤三、多窗格数据修改窗体的主要程序代码三、多窗格数据修改窗体的主要程序代码四、四、Spl
2、itterSplitter控件与控件与PanelPanel控件控件4一、多窗格数据修改窗体的功能和用户界面(一、多窗格数据修改窗体的功能和用户界面(1/2)多窗格数据修改窗体实现对数据库多窗格数据修改窗体实现对数据库XSGLXSGL中中 学生信息表学生信息表 的记录进行修改更新的功能。的记录进行修改更新的功能。在该功能窗体上,用户能够逐条浏览到在该功能窗体上,用户能够逐条浏览到 学生学生信息表信息表 内学生的基本信息,当确定需要修改内学生的基本信息,当确定需要修改数据时,可以对数据记录进行编辑修改,并数据时,可以对数据记录进行编辑修改,并更新数据记录到数据库中。程序运行后的用更新数据记录到数据
3、库中。程序运行后的用户界面如下图。户界面如下图。5一、多窗格数据修改窗体的功能和用户界面(一、多窗格数据修改窗体的功能和用户界面(2/2)6二、多窗格数据修改窗体的设计步骤(二、多窗格数据修改窗体的设计步骤(1/3)创建创建WindowsWindows应用程序项目,项目名称为应用程序项目,项目名称为“多窗格数据修改窗体实例多窗格数据修改窗体实例”。使用数据连接向导将窗体连接到数据库使用数据连接向导将窗体连接到数据库XSGLXSGL,提取,提取 学生信息表学生信息表 中的所有中的所有数 据 到 数 据 集 中,此 举 在 窗 体 的 托 架 上 得 到数 据 到 数 据 集 中,此 举 在 窗
4、体 的 托 架 上 得 到 3 3 个 数 据 访 问 控 件个 数 据 访 问 控 件sqlConnection1sqlConnection1、sqlDataAdapter1sqlDataAdapter1和和dataSet11dataSet11。向窗体中加入一个向窗体中加入一个PanelPanel控件,控件名为控件,控件名为 panel1panel1。设置该控件的。设置该控件的DockDock属性属性值为值为 TopTop,使停靠在窗体的顶部。设置其,使停靠在窗体的顶部。设置其BorderStyleBorderStyle属性值为属性值为Fixed3DFixed3D。向窗体中加入一个向窗体中加
5、入一个SplitterSplitter控件,控件名为控件,控件名为splitter1splitter1。设置其。设置其DockDock属性属性值为值为TopTop,使其紧贴在控件,使其紧贴在控件panel1panel1的下方。的下方。向控件向控件splitter1splitter1的下方加入一个的下方加入一个PanelPanel控件,控件名为控件,控件名为 panel2panel2。设置该。设置该控件的控件的DockDock属性值为属性值为 FillFill,使充满在窗体的下部。设置其,使充满在窗体的下部。设置其BorderStyleBorderStyle属属性值为性值为Fixed3DFixe
6、d3D。7二、多窗格数据修改窗体的设计步骤(二、多窗格数据修改窗体的设计步骤(2/3)向向panel1panel1中加入中加入1 1个个 LabelLabel控件,控件名为控件,控件名为label1label1。向向panel1panel1中加入中加入1 1个个GroupBoxGroupBox控件,控件名为控件,控件名为groupBox1groupBox1。向控件向控件groupBox1groupBox1中加入中加入1 1个个LabelLabel控件,控件名为控件,控件名为label2label2,TextText属属性值为性值为“学号学号”。加入。加入1 1个个ComboBoxComboBo
7、x控件到控件到groupBox1groupBox1中,控件名中,控件名为为comBoxNumbercomBoxNumber。打开控件。打开控件comBoxNumbecomBoxNumbe的属性窗口,将数据源的属性窗口,将数据源属性属性DataSourceDataSource指定到数据集指定到数据集“dataSet11.dataSet11.学生信息表学生信息表”,显示,显示成员属性成员属性DisplayMenberDisplayMenber指定到指定到“学号学号”。向控件向控件groupBox1groupBox1中加入中加入4 4个个ButtonButton控件,控件名为控件,控件名为butto
8、nFirstbuttonFirst、buttonPreviousbuttonPrevious、buttonNextbuttonNext和和buttonLastbuttonLast。向向panel2panel2中加入中加入1 1个个GroupBoxGroupBox控件,控件名为控件,控件名为groupBox2groupBox2。向控件向控件groupBox2groupBox2中加入中加入9 9个个LabelLabel控件,这些控件的文本为控件,这些控件的文本为“姓姓名名”、“性别性别”等。等。8二、多窗格数据修改窗体的设计步骤(二、多窗格数据修改窗体的设计步骤(3/3)向控件向控件groupBo
9、x2groupBox2中加入中加入9 9个个TextBoxTextBox控件,控件名为控件,控件名为textBoxNametextBoxName、textBoxSextextBoxSex等,这等,这9 9个控件分别用来显示或编辑对应的数据项。个控件分别用来显示或编辑对应的数据项。将这将这9 9个文本框的个文本框的TextText属性绑定到数据集属性绑定到数据集dataSet11dataSet11的对应列上。的对应列上。向控件向控件groupBox2groupBox2中加入中加入1 1个个pictureBox1pictureBox1控件控件,展示学生的相片。展示学生的相片。向控件向控件group
10、Box2groupBox2中加入中加入1 1个个ButtonButton控件控件,控件名为控件名为buttonBrowsebuttonBrowse,用来启动打开文件对话框,让用户查找相片文件以替换某个学生用来启动打开文件对话框,让用户查找相片文件以替换某个学生原来的相片。设置其原来的相片。设置其EnabledEnabled属性初始值为属性初始值为falsefalse,待程序运行后,待程序运行后切换到修改数据状态时再由程序代码改为切换到修改数据状态时再由程序代码改为truetrue。向控件向控件groupBox2groupBox2中加入中加入1 1个个GroupBoxGroupBox控件,控件名
11、为控件,控件名为groupBox3groupBox3。向 控 件 向 控 件 g r o u p B o x 3g r o u p B o x 3 中 加 入中 加 入 3 3 个个 B u t t o nB u t t o n 控 件,控 件 名 为控 件,控 件 名 为 buttonModiOrCanclebuttonModiOrCancle、buttonUpdatebuttonUpdate和和buttonExitbuttonExit。这。这3 3个控件个控件分别用启动分别用启动“修改信息修改信息”、“保存修改保存修改”和和“退出退出”功能。设置功能。设置控件控件buttonUpdateb
12、uttonUpdate的的EnabledEnabled属性初始值为属性初始值为falsefalse,待程序运行后,待程序运行后切换到修改数据状态时再由程序代码改为切换到修改数据状态时再由程序代码改为truetrue。9三、多窗格数据修改窗体的主要程序代码(三、多窗格数据修改窗体的主要程序代码(1/5)这里仅给出这里仅给出【保存修改保存修改】按钮单击的代码按钮单击的代码。private void buttonUpdate_Click(object sender,System.EventArgs e)/取各文本框的数据取各文本框的数据string number=comboBoxNumber.Tex
13、t;string name=textBoxName.Text;string sex=textBoxSex.Text;string Class=textBoxClass.Text;string birthday=textBoxBirthday.Text;string face=textBoxFace.Text;string nation=textBoxNation.Text;string place=textBoxPlace.Text;string studyState=textBoxState.Text;10三、多窗格数据修改窗体的主要程序代码(三、多窗格数据修改窗体的主要程序代码(2/5)/
14、取相片文件的相对路径取相片文件的相对路径string exePath=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;string photoPath=textBoxPhotoPath.Text;int n=exePath.Length;int m=photoPath.Length;if(mn)photoPath=photoPath.Substring(n,m-n);/构建命令字符串,准备更新记录构建命令字符串,准备更新记录SqlCommand myUpdateCommand=sqlConnection1.CreateComma
15、nd();myUpdateCommand.CommandText=Update 学生信息表学生信息表 Set 姓名姓名=xm,性别性别=xb,班级班级=bj,+出生日期出生日期=csrq,政治面貌政治面貌=zzmm,民族民族=mz,籍贯籍贯=jg,学习状况学习状况=xxzk,相片相片URL=txlj where 学号学号=+number+;11三、多窗格数据修改窗体的主要程序代码(三、多窗格数据修改窗体的主要程序代码(3/5)/设置命令参数设置命令参数/括号内的括号内的4个内容分别为:参数名、参数类型、宽度、参数所代表的列名个内容分别为:参数名、参数类型、宽度、参数所代表的列名myUpdate
16、Command.Parameters.Add(xm,SqlDbType.NChar,10,姓名姓名);myUpdateCommand.Parameters.Add(xb,SqlDbType.NChar,2,性别性别);myUpdateCommand.Parameters.Add(bj,SqlDbType.NChar,10,班级班级);myUpdateCommand.Parameters.Add(csrq,SqlDbType.DateTime,8,出生日期出生日期);myUpdateCommand.Parameters.Add(zzmm,SqlDbType.NChar,10,政治面貌政治面貌);
17、myUpdateCommand.Parameters.Add(mz,SqlDbType.NChar,10,民族民族);myUpdateCommand.Parameters.Add(jg,SqlDbType.NChar,20,籍贯籍贯);myUpdateCommand.Parameters.Add(xxzk,SqlDbType.NChar,10,学习状况学习状况);myUpdateCommand.Parameters.Add(txlj,SqlDbType.NChar,20,相片相片URL);/给定参数的值给定参数的值myUpdateCommand.Parametersxm.Value=name;
18、myUpdateCommand.Parametersxb.Value=sex;myUpdateCommand.Parametersbj.Value=Class;myUpdateCommand.Parameterscsrq.Value=birthday;myUpdateCommand.Parameterszzmm.Value=face;myUpdateCommand.Parametersmz.Value=nation;myUpdateCommand.Parametersjg.Value=place;myUpdateCommand.Parametersxxzk.Value=studyState;m
19、yUpdateCommand.Parameterstxlj.Value=photoPath;12三、多窗格数据修改窗体的主要程序代码(三、多窗格数据修改窗体的主要程序代码(4/5)/执行更新命令执行更新命令sqlConnection1.Open();trymyUpdateCommand.ExecuteNonQuery();MessageBox.Show(数据已更新。数据已更新。,信息提示信息提示,MessageBoxButtons.OK,MessageBoxIcon.Information);catch(Exception E)MessageBox.Show(数据格式错误,不能更新数据。数据格
20、式错误,不能更新数据。,信息提示信息提示,MessageBoxButtons.OK,MessageBoxIcon.Exclamation);sqlConnection1.Close();/重新绑定数据,定位到更新时的那条记录重新绑定数据,定位到更新时的那条记录n=comboBoxNumber.SelectedIndex;dataSet11.Clear();sqlDataAdapter1.Fill(dataSet11,学生信息表学生信息表);comboBoxNumber.SelectedIndex=n;BindingContextdataSet11,学生信息表学生信息表.Position=n;D
21、ataBind(n);13三、多窗格数据修改窗体的主要程序代码(三、多窗格数据修改窗体的主要程序代码(5/5)/设置控件的属性,使处于信息浏览状态设置控件的属性,使处于信息浏览状态buttonModiOrCancle.Text=修改数据修改数据;textBoxName.ReadOnly=true;textBoxSex.ReadOnly=true;textBoxClass.ReadOnly=true;textBoxBirthday.ReadOnly=true;textBoxFace.ReadOnly=true;textBoxNation.ReadOnly=true;textBoxPlace.Re
22、adOnly=true;textBoxState.ReadOnly=true;buttonBrowse.Enabled=false;buttonUpdate.Enabled=false;panel1.Enabled=true;14四、四、Splitter控件与控件与Panel控件(控件(1/2)Splitter Splitter与与PanelPanel是多窗格窗体设计中最常用的控是多窗格窗体设计中最常用的控件。没有这两个控件,灵活多样的多窗格窗体是很难设件。没有这两个控件,灵活多样的多窗格窗体是很难设计出来的。计出来的。1 1、SplitterSplitter控件控件 Splitter Spl
23、itter控件称为分割器,用来分割窗体成多个窗控件称为分割器,用来分割窗体成多个窗格。程序运行后,用户可以拖动它来改变窗体各窗格之格。程序运行后,用户可以拖动它来改变窗体各窗格之间的大小。间的大小。Dock Dock属性属性 设置控件停靠在容器的哪一边。设置控件停靠在容器的哪一边。Cursor Cursor属性属性 设置鼠标到达控件上的光标形状。设置鼠标到达控件上的光标形状。Enabled Enabled属性属性 设置控件的可用性。设置控件的可用性。15四、四、Splitter控件与控件与Panel控件(控件(2/2)2 2、PanelPanel控件控件 Panel Panel控件称为面板,它
24、作为容器控件使控件称为面板,它作为容器控件使用。通常把实现某个功能的多个控件放在同一用。通常把实现某个功能的多个控件放在同一个个PanelPanel中,以便统一改变它们在窗体中的位中,以便统一改变它们在窗体中的位置,或统一改变它们的可用性和可见性。置,或统一改变它们的可用性和可见性。Dock Dock属性属性 设置控件停靠在容器的哪一边。设置控件停靠在容器的哪一边。BorderStyleBorderStyle属性属性 设置控件的边框风格。设置控件的边框风格。Enabled Enabled属性属性 设置控件的可用性。设置控件的可用性。Visible Visible属性属性 设置控件的可见性设置控件的可见性。