《第19讲多窗格数据浏览窗体实例》由会员分享,可在线阅读,更多相关《第19讲多窗格数据浏览窗体实例(19页珍藏版)》请在金锄头文库上搜索。
1、李德奇李德奇 主编主编第十九讲多窗格数据浏览窗体实例多窗格数据浏览窗体实例 大连理工大学出版社大连理工大学出版社1教学目标教学目标l掌握多窗格窗体的设计过程掌握多窗格窗体的设计过程l掌握掌握TreeViewTreeView控件的使用控件的使用l掌握对掌握对TreeViewTreeView控件的节点控制方法控件的节点控制方法l完成多窗格数据浏览窗体实例的程序编写完成多窗格数据浏览窗体实例的程序编写2教学内容教学内容一、多窗格数据浏览窗体的功能和用户界面一、多窗格数据浏览窗体的功能和用户界面二、多窗格数据浏览窗体的设计步骤二、多窗格数据浏览窗体的设计步骤三、多窗格数据浏览窗体的主要程序代码三、多窗
2、格数据浏览窗体的主要程序代码四、四、TreeViewTreeView控件控件3一、多窗格数据浏览窗体的功能和用户界面一、多窗格数据浏览窗体的功能和用户界面(1/2) 多多窗窗格格数数据据浏浏览览窗窗体体实实现现对对数数据据库库XSGLXSGL中中的的 学学生生信信息息表表 的的学学生生信信息息进进行行快快速速定定位位浏浏览览,用用户户在在窗窗体体的的左左窗窗格格中中选选择择一一个个学学号号,在在窗窗体体的的右右窗窗格格中中将将显显示示该该生生的的详详细细信信息息。程序运行后的用户界面如下图。程序运行后的用户界面如下图。4一、多窗格数据浏览窗体的功能和用户界面一、多窗格数据浏览窗体的功能和用户界
3、面(2/2)5二、多窗格数据浏览窗体的设计步骤二、多窗格数据浏览窗体的设计步骤(1/2)创建创建WindowsWindows应用程序项目,项目名称为应用程序项目,项目名称为“多窗格数据浏览窗体实例多窗格数据浏览窗体实例”。向向窗窗体体中中加加入入一一个个ImageListImageList控控件件,控控件件名名为为imageList1imageList1。打打开开控控件件的的属属性性窗窗口口,单单击击ImagesImages属属性性后后的的按按钮钮,弹弹出出ImageImage集集合合编编辑辑器器,向向其其中中加加入入2 2幅幅图图片片,一一幅幅为为文文件件夹夹图图片片,另另一一幅幅为为文文件
4、件夹夹被被打打开开的的图图片片,这这两两幅幅图图片片是为接下来设计的是为接下来设计的TreeViewTreeView控件的节点准备的。控件的节点准备的。向向窗窗体体中中加加入入1 1个个TreeViewTreeView 控控件件,控控件件名名为为treeView1treeView1。打打开开它它的的属属性性窗窗口口,在在其其中中设设置置其其ImageListImageList属属性性值值为为imageList1,imageList1,指指明明其其节节点点图图片片由由该该控控件件提提供供;设设置置其其DockDock属属性性值值为为LeftLeft,使使起起停停靠靠在在窗窗体体的的左左边边。该该
5、控控件件显显示示某某职职业技术学院学生管理部门的系业技术学院学生管理部门的系-班级班级学号的层次结构。学号的层次结构。向向窗窗体体中中加加入入1 1个个SplitterSplitter控控件件,控控件件名名为为splitter1splitter1。 设设置置其其DockDock属属性性值值为为LeftLeft,使将其紧贴在控件,使将其紧贴在控件treeView1treeView1的右边。的右边。向向窗窗体体的的右右部部加加入入一一个个PanelPanel控控件件,控控件件名名为为panel1panel1。设设置置其其DockDock属属性性值值为为FillFill,使充满窗体的右部。,使充满窗
6、体的右部。6二、多窗格数据浏览窗体的设计步骤二、多窗格数据浏览窗体的设计步骤(2/2)向向panel1panel1中中加加入入一一个个LabelLabel控控件件,该该控控件件的的文文本本为为“学学生信息浏览生信息浏览”,说明其下方显示的是学生的信息。,说明其下方显示的是学生的信息。向向panel1panel1加加入入一一个个GroupBoxGroupBox控控件件,控控件件名名为为groupBox1groupBox1,将显示学生信息的控件捆绑在一起。,将显示学生信息的控件捆绑在一起。向向控控件件groupBox1groupBox1中中加加入入1010个个LabelLabel控控件件,控控件件
7、名名为为 label2label11label2label11。这这1010个个控控件件用用来来标标明明各各数数据据项项的的名名称。称。向向控控件件groupBox1groupBox1中中加加入入9 9个个LabelLabel控控件件,控控件件名名为为 labelNumberlabelNumber、labelNamelabelName等等。这这9 9个个控控件件用用来来显显示示学学生生的文本类型数据。的文本类型数据。向向控控件件groupBox1groupBox1中中加加入入1 1个个PictureBoxPictureBox控控件件,控控件件名名为为pictureBox1pictureBox1
8、。这个控件用来显示学生的相片。这个控件用来显示学生的相片。7三、多窗格数据浏览窗体的主要程序代码(三、多窗格数据浏览窗体的主要程序代码(1/7)定义构造树型控件根节点的方法定义构造树型控件根节点的方法private void StructRootNode()/查询系别信息查询系别信息myDataAdapter.SelectCommand.CommandText=select * from 系别信息表系别信息表;DataSet departmentSet=new DataSet();int n=myDataAdapter.Fill(departmentSet,系别信息表系别信息表);string
9、 nodeText;DataSet classSet=new DataSet ();/循环向控件循环向控件treeView1加入根节点加入根节点,这些节点就是这些节点就是“系系”节点节点for(int i=0;in;i+) nodeText=departmentSet.Tables系别信息表系别信息表.Rowsi系名称系名称.ToString(); TreeNode node=new TreeNode(nodeText,0,1); /增加节点标记,以便之后判断节点的类别增加节点标记,以便之后判断节点的类别 node.Tag=系节点系节点; /向控件向控件treeView1中增加一个根节点中增加
10、一个根节点 treeView1.Nodes.Add(node); /查找该系下面的班级查找该系下面的班级 myDataAdapter.SelectCommand.CommandText=select * from 班级信息表班级信息表+ where 所属系所属系=+nodeText+; classSet.Clear(); myDataAdapter.Fill(classSet,班级信息表班级信息表); /若该系的班级数不为若该系的班级数不为0 if(classSet.Tables班级信息表班级信息表.Rows.Count!=0) /在该根节点下加入一个空的子节点,以便之后能够展开该节点在该根节
11、点下加入一个空的子节点,以便之后能够展开该节点node.Nodes.Add(new TreeNode(); 8三、多窗格数据浏览窗体的主要程序代码(三、多窗格数据浏览窗体的主要程序代码(2/7)树型控件节点展开(树型控件节点展开(1/3)private void treeView1_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)string nodeType=e.Node.Tag.ToString(); string nodeName=e.Node.Text;DataSet classSet
12、=new DataSet();DataSet studentSet=new DataSet();int n;switch(nodeType) case 系节点系节点:myDataAdapter.SelectCommand.CommandText=select 班级名称班级名称 from + 班级信息表班级信息表 where 所属系所属系=+nodeName+;classSet.Clear();n=myDataAdapter.Fill(classSet,班级信息表班级信息表);/清除要展开的节点下的所有节点,以便重新构造该节点的子节点清除要展开的节点下的所有节点,以便重新构造该节点的子节点e.N
13、ode.Nodes.Clear();9三、多窗格数据浏览窗体的主要程序代码三、多窗格数据浏览窗体的主要程序代码(3/7)树型控件节点展开(树型控件节点展开(2/3)/循环添加子节点循环添加子节点for(int i=0;in;i+)TreeNode node=new TreeNode(classSet.Tables班级信息表班级信息表.Rowsi班级名称班级名称.ToString(),0,1);/增加节点标记,以便之后判断节点的类别增加节点标记,以便之后判断节点的类别node.Tag=班级节点班级节点;e.Node.Nodes.Add(node);/查找该班级下面的学生查找该班级下面的学生myD
14、ataAdapter.SelectCommand.CommandText=select * from+ 学生信息表学生信息表 where 班级班级=+node.Text+;studentSet.Clear();myDataAdapter.Fill(studentSet,学生信息表学生信息表);/若班级的学生数不为若班级的学生数不为0if(studentSet.Tables学生信息表学生信息表.Rows.Count!=0) /在该节点下加入一个空的子节点,以便之后能够展开该节点在该节点下加入一个空的子节点,以便之后能够展开该节点 node.Nodes.Add(new TreeNode();bre
15、ak;10三、多窗格数据浏览窗体的主要程序代码三、多窗格数据浏览窗体的主要程序代码(4/7)树型控件节点展开(树型控件节点展开(3/3) case case 班级节点班级节点:myDataAdapter.SelectCommand.CommandText=selectmyDataAdapter.SelectCommand.CommandText=select 学号学号 from +from + 学生信息表学生信息表 where where 班级班级=+nodeName+=+nodeName+;studentSet.ClearstudentSet.Clear();();n=myDataAdapt
16、er.Filln=myDataAdapter.Fill( (studentSetstudentSet,学生信息表学生信息表););/清除要展开的节点下的所有节点,以便重新构造该节点的子节点清除要展开的节点下的所有节点,以便重新构造该节点的子节点e.Node.Nodes.Cleare.Node.Nodes.Clear();();/循环添加子节点循环添加子节点for(for(intint i=0;i i=0;in;i+n;i+) ) TreeNodeTreeNode node=newnode=new TreeNodeTreeNode( (studentSet.TablesstudentSet.Ta
17、bles学生信息表学生信息表.RowsiRowsi学号学号.ToStringToString(),0,1);(),0,1); /增加节点标记,以便之后判断节点的类别增加节点标记,以便之后判断节点的类别 node.Tag=node.Tag= 学号节点学号节点; e.Node.Nodes.Adde.Node.Nodes.Add(node);(node); break;break; 11三、多窗格数据浏览窗体的主要程序代码三、多窗格数据浏览窗体的主要程序代码(5/7)树型控件选择节点树型控件选择节点(1/3) private void treeView1_AfterSelect(object sen
18、der, System.Windows.Forms.TreeViewEventArgs e)string nodeType=e.Node.Tag.ToString();string number=e.Node.Text;if(nodeType=学号节点学号节点)myDataAdapter.SelectCommand.CommandText=select * from 学生信息表学生信息表 where 学号学号=+number+;DataSet mySet=new DataSet();myDataAdapter.Fill(mySet,学生信息表学生信息表);12三、多窗格数据浏览窗体的主要程序代
19、码三、多窗格数据浏览窗体的主要程序代码(6/7)树型控件选择节点树型控件选择节点(2/3) /将一条数据记录的文本信息显示在各标签中将一条数据记录的文本信息显示在各标签中labelNumber.Text=mySet.Tables学生信息表学生信息表.Rows0学号学号.ToString();labelName.Text=mySet.Tables学生信息表学生信息表.Rows0姓名姓名.ToString();labelSex.Text=mySet.Tables学生信息表学生信息表.Rows0性别性别.ToString();labelClass.Text=mySet.Tables学生信息表学生信息
20、表.Rows0班级班级.ToString();labelBirthday.Text=mySet.Tables学学 生生 信信 息息 表表 .Rows0出出 生生 日日 期期.ToString();labelFace.Text=mySet.Tables学生信息表学生信息表.Rows0政治面貌政治面貌.ToString();labelNation.Text=mySet.Tables学生信息表学生信息表.Rows0民族民族.ToString();labelPlace.Text=mySet.Tables学生信息表学生信息表.Rows0籍贯籍贯.ToString();labelState.Text=my
21、Set.Tables学学 生生 信信 息息 表表 .Rows0学学 习习 状状 况况.ToString();/取应用程序当前文件夹路径取应用程序当前文件夹路径string exePath=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;/加上数据表中的相对路径构成相片文件的完整文件名加上数据表中的相对路径构成相片文件的完整文件名string fileName=exePath+mySet.Tables学生信息表学生信息表.Rows0相片相片URL.ToString();FileInfo test=new FileInfo(file
22、Name);13三、多窗格数据浏览窗体的主要程序代码三、多窗格数据浏览窗体的主要程序代码(7/7)树型控件选择节点树型控件选择节点(3/3) /测试该相片文件是否存在测试该相片文件是否存在if(test.Exists) /在图片框中显示相片在图片框中显示相片Image image1=Image.FromFile(fileName); pictureBox1.Image=image1;elsepictureBox1.Image=null;else/清空显示区清空显示区labelNumber.Text=;labelName.Text=;labelSex.Text=;labelClass.Text=
23、;labelBirthday.Text=;labelFace.Text=;labelNation.Text=;labelPlace.Text=;labelState.Text=;pictureBox1.Image=null;14四、四、TreeView控件(控件(1/5) TreeViewTreeView控控件件称称为为树树型型控控件件,其其节节点点呈呈树树型型结结构构,第第一一层层的的节节点点称称为为根根节节点点,根根节节点点之之下的所有节点都称为子节点。下的所有节点都称为子节点。 TreeViewTreeView控控件件的的NodesNodes属属性性是是树树型型控控件件的的节节点点集集合
24、合,它它包包括括了了节节点点的的数数据据及及节节点点的的层层次次关关系系。构构造造TreeViewTreeView控控件件的的节节点点有有两两种种办办法法:使使用用树树节节点点编编辑辑器器编编辑辑节节点点和和编编写写程程序序代代码码添添加节点。加节点。15四、四、TreeView控件(控件(2/5)1 1、编写程序代码构造树型控件的根节点、编写程序代码构造树型控件的根节点 可以调用可以调用TreeViewTreeView控件的控件的 NodesNodes集合中的一些方法来构造集合中的一些方法来构造TreeViewTreeView的根节点。的根节点。Nodes.AddNodes.Add( (Tr
25、eeNodeTreeNode node)node)方方法法 向向TreeViewTreeView控控件件添添加加一一个个根根节节点点。调调用用该该方方法法需需要要一一个个TreeNodeTreeNode类型的实参,也就是一个节点实例。使用的例子有:类型的实参,也就是一个节点实例。使用的例子有: TreeNodeTreeNode node=newnode=new TreeNodeTreeNode(北京北京,0,1);,0,1); treeView1.Nodes.Add(node) ; treeView1.Nodes.Add(node) ;构构造造一一个个节节点点实实例例nodenode,该该节节
26、点点的的文文本本为为“北北京京”,节节点点未未选选中中时时的的图图标标来来自自控控件件imageList1imageList1的的第第一一幅幅图图像像,节节点点选选中中后后的的图图标标来来自自imageList1imageList1的的第第二二幅幅图图像像。将将节节点点NodeNode添添加加到到控控件件treeView1treeView1的根节点中。的根节点中。Nodes.RemoveNodes.Remove( (TreeNodeTreeNode node)node)方方法法 从从TreeViewTreeView控控件件中中移移除除一一个个根根节节点点。该该方方法法的的参参数数是是被被移移除
27、除的节点实例。的节点实例。Nodes.RemoveAtNodes.RemoveAt( (intint Index)Index)方方法法 从从TreeViewTreeView控控件件中中移移除除一一个个根根节节点点。该该方方法法的的参参数数是是被被移移除除的的节点的索引号。节点的索引号。Nodes.InsertNodes.Insert( (intint Index,TreeNodeIndex,TreeNode node)node)方方法法 向向TreeViewTreeView控控件件中中插插入入一一个个根根节节点点。第第一一个个参参数数是插入后的节点索引号,第二个参数是被插入的节点实例。是插入后
28、的节点索引号,第二个参数是被插入的节点实例。Nodes.ClearNodes.Clear()()方方法法 清清除除TreeViewTreeView控控件件中中的的所所有有根根节节点点。当当所所有有的的根根节节点点被被清清除除后后,其其子子节节点点自自然不存在了。然不存在了。Nodes.CountNodes.Count属性属性 节点集合中的根节点数。节点集合中的根节点数。 调调用用以以上上的的方方法法和和使使用用以以上上的的属属性性,可可以以对对TreeViewTreeView控控件件的的根根节节点点进进行行操操作作。6.2.26.2.2节节中中自自定定义义方方法法StructRootNodeS
29、tructRootNode()()中中从从数数据据库库读读取取数数据据来来构构造造根根节节点点是是一一个个应应用用的的例例子子。由由于于各各个个应应用用系系统统对对节节点点的的数数据据和和结结构构在在数数据据库库中中记记录录的的方方法法和和格格式式不不同同,构构造造TreeViewTreeView控控件件的的程程序代码是不同的,但基本原理是相同的。序代码是不同的,但基本原理是相同的。16四、四、TreeView控件(控件(3/5)2 2、编写程序代码构造树型控件的子节点、编写程序代码构造树型控件的子节点 TreeViewTreeView控控件件的的节节点点树树是是一一个个层层次次结结构构,每每
30、一一个个节节点点都都有有一一个个NodesNodes集集合合,该该集集合合包包含含了了本本节节点点的的所所有有直直接接下下级级子子节节点点。每每个个NodesNodes都都带带有有上上述述的的AddAdd、RemoveRemove、RemoveAtRemoveAt、InsertInsert、ClearClear等等方方法法和和CountCount属属性性,使使用用每每个个节节点点的的NodesNodes集合的方法和属性,就可以构造各个节点的子节点来。例如:集合的方法和属性,就可以构造各个节点的子节点来。例如: treeView1.Nodes0. treeView1.Nodes0.Nodes.A
31、ddNodes.Add(new (new TreeNodeTreeNode(湘潭湘潭,0,1);,0,1); 向向树树型型控控件件的的第第一一个个根根节节点点添添加加一一个个子子节节点点,该该节节点点的的文文本本为为“湘湘潭潭”,未未选选中中时时的的图图标标为为控控件件imageList1imageList1的的第第一一幅图片,选中后的图标为控件幅图片,选中后的图标为控件imageList1imageList1的第二幅图片。的第二幅图片。17四、四、TreeView控件(控件(4/5)3 3、TreeView_BeforeExpandTreeView_BeforeExpand事件事件 利利用用
32、TreeViewTreeView控控件件的的BeforeExpandBeforeExpand事事件件来来构构造造TreeViewTreeView控控件件的的子子节节点点是是一一个个不不错错的的设设计计。该该事事件件在在TreeViewTreeView控控件件的的节节点点即即将将展展开开之之前前引引发发,编编程程的的基基本本原原理理是是当当某某个个节节点点即即将将展展开开时时构构造造该该节节点点的的子子节节点点,那那些些不不必必展展开开的的节节点点不不需需要要构构造造它它的的子子节节点点。事事件件处处理理程程序序的的参参数数e e带带入入了了被被展展开开节节点点的的信信息息,获获取取e.Node
33、.Texte.Node.Text属属性性、e.Node.Indexe.Node.Index属属性性和和e.Node.Tage.Node.Tag属属性性的的值值,可可以以判判别别被被展展开的是哪个节点。开的是哪个节点。 e.Node.Texte.Node.Text属性属性 被展开节点的文本。被展开节点的文本。 e.Node.Indexe.Node.Index属性属性 被展开节点的索引号。被展开节点的索引号。 e.Node.Tage.Node.Tag属性属性 被展开节点的标记。被展开节点的标记。18四、四、TreeView控件(控件(5/5)4 4、TreeView_AfterSelectTree
34、View_AfterSelect事件事件 当当在在树树型型控控件件上上选选择择了了某某个个节节点点后后,将将引引发发TreeView_AfterSelectTreeView_AfterSelect事件。事件。 与与TreeView_BeforeExpandTreeView_BeforeExpand事事件件处处理理程程序序类类似似,TreeView_AfterSelectTreeView_AfterSelect事事件件处处理理程程序序的的参参数数e e将将带带入入被被选选中中的的节节点点的的数数据据,e.Node.Texte.Node.Text属属性性、e.Node.Indexe.Node.Index属属性性和和e.Node.Tage.Node.Tag属属性性的的值值常常被被用用来来作作为为判判别别被被选选中中的是哪个节点的编程依据的是哪个节点的编程依据。19