《853.Net三层应用结构开发第十三章.ppt》由会员分享,可在线阅读,更多相关《853.Net三层应用结构开发第十三章.ppt(25页珍藏版)》请在三一办公上搜索。
1、.Net三层应用结构开发第十三章,ADO.NET视图控件TreeView和ListView,目标,掌握 ListView 控件掌握 TreeView 控件,ListView 控件 2-1,可折叠的 TreeView,ListView,选择列出项目的视图类型,ListView 控件 2-2,创建与 Windows 资源管理器的右窗口相似的用户界面,可用于以特定样式或视图类型显示列表项,四种视图模式,即大图标、小图标、列表和详细资料,ListView 控件的属性和方法,Column 集合和 Column 对象,ListView 控件的 Columns 属性表示控件中出现的所有列标题的集合列标题是
2、ListView 控件中包含标题文本的一个项ColumnHeader 对象定义在控件的 View 属性设置为“Details”值时,作为 ListView 控件的一部分显示的那些列 如果 ListView 控件没有没有任何列标题,并且 View 属性设置为 Details,则 ListView 控件不显示任何项,添加列标题,方法一:ColumnHeader objHeader=new ColumnHeader();objHeader.Text=姓名;objHeader.TextAlign=HorizontalAlignment.Center;objHeader.Width=100;lvPers
3、on.Columns.Add(objHeader);,方法二:lvPerson.Columns.Add(姓名,60,HorizontalAlignment.Right);,添加多个列应该如何做?,项集合和项对象,ListView 控件的 Items 属性表示包含控件中所有项的集合 该属性返回 ListView.ListViewItemCollection,可以用于 ListView 中添加新项、删除项或计算可用项数,添加记录,ListViewItem lstItem=new ListViewItem(name,图片索引);lstItem.SubItems.Add(“”);/第1列lstItem
4、.SubItems.Add(“”);/第2列 lstItem.SubItems.Add(“);/第n列lvPerson.Items.Add(lstItem),实例化一个ListViewItem,设置各列的数值,将定义好的数值添加到ListView里面,添加多行数据怎么办?,TreeView 控件 2-1,TreeView 控件 2-2,用于以节点形式显示文本或数据,这些节点按层次结构顺序排列,Windows 资源管理器中左窗格所包含的目录和文件是以树型视图样式排列的,在 TreeView 控件中,复选框和图标可以和文本一起显示,节点集和节点对象,TreeView 控件的 Nodes 属性表示为
5、 TreeView 控件指定的树节点集 树节点集中的每个树节点对象可包括它本身的树节点集树节点集中 Add()、Remove()和 RemoveAt()方法使开发人员可添加和移动集中的单个树节点,添加、修改和删除节点 3-1,TreeView 控件以层次结构方式显示节点在将新节点添加到现有 TreeView 时,重要的是注意新节点所添加到的父节点可用设计器模式或用户界面在 TreeView 上添加或删除节点,添加、修改和删除节点 3-2,在窗体上选择已存在的 TreeView 控件或在窗体上添加一个新控件,在“属性”窗口中单击节点属性旁的省略号()按钮,调用树节点编辑器,添加到树的第一个节点是
6、根节点,其他节点可添加到存在根节点的树上,通过选择根节点或任何其他节点,然后单击“添加子级”按钮,可为树添加子节点,要使用树节点编辑器删除节点,请重复步骤 1 和 2。调用树节点编辑器,然后选择要删除的节点,单击“删除”,添加、修改和删除节点 3-3,可通过编程方式向 TreeView 添加节点,TreeNode chNode=new TreeNode(Text for new node);tvwTree1.currNode.Nodes.Add(chNode);,可通过编程方式从 TreeView 删除节点,.tvwTree1.Nodes.Remove(tvwTree1.currNode);/
7、清除所有节点tvwTree1.Nodes.Clear();,如果没有选定要删除的节点,则会删除根节点,TreeView 控件的属性和事件,TreeView 控件名的前缀是 tvw,如:tvwTree,tvwList,程序实例需求,列出文件夹的TreeView,对TreeView的控制,显示节点的属性,添加盘符,private void FilltvwDirectory()string drives=Environment.GetLogicalDrives();/获取当前设备盘符,并添加到数组driversl里面 for(int i=0;i drives.Length;i+)TreeNode c
8、Root=new TreeNode(drivesi);/这里可以写成/TreeNode cRoot=new TreeNode();/cRoot.Text=driversi;tvwDirectory.Nodes.Add(cRoot);AddDirectories(cRoot);/添加该盘符下的文件夹,获取盘符并添加到数组里面,将该盘符添加到TreeView并调用AddDirectories()方法添加盘符下的文件夹,添加下一级文件夹,private void AddDirectories(TreeNode node)try DirectoryInfo dir=new DirectoryInfo(
9、GetPathFromNode(node);DirectoryInfo e=dir.GetDirectories();for(int i=0;i e.Length;i+)string name=ei.Name;if(!name.Equals(.),利用GetPathFromNode()方法获取当前节点的路径并找到他的下级文件夹,之后添加到DirectoryInfo数组内,若文件夹不是返回上级目录标志则添加到TreeView里面,展开节点,private void tvwDirectory_BeforeExpand(object source,TreeViewCancelEventArgs e)
10、TreeNode nodeExpanding=(TreeNode)e.Node;AddSubDirectories(nodeExpanding);/调用AddDirectories将该节点的字节点添加到树图中该节点下private void AddSubDirectories(TreeNode node)for(int i=0;i node.Nodes.Count;i+)AddDirectories(node.Nodesi);,用户点击“+”展开下一级目录时调用此事件添加下级目录,排序节点,private void chkOrder_Click(object source,EventArgs
11、e)this.tvwDirectory.Sorted=chkOrder.Checked;/树图排序for(int i=0;i tvwDirectory.Nodes.Count;i+)Refresh(tvwDirectory.Nodesi);/调用刷新树图方法,重新添加节点,当用户点击排序复选框时触发此事件在此事件中首先对树图排序之后调用Refresh方法重新添加到树图上,private void Refresh(TreeNode node)if(node.Nodes.Count 0)if(node.IsExpanded)string tooBigExpandedNodes=new string
12、node.GetNodeCount(true);int iExpandedNodes=Refresh_GetExpanded(node,tooBigExpandedNodes,0);string expandedNodes=new stringiExpandedNodes;Array.Copy(tooBigExpandedNodes,0,expandedNodes,0,iExpandedNodes);node.Nodes.Clear();AddDirectories(node);AddSubDirectories(TreeNode)node);node.Expand();for(int j=0
13、;j 0)Refresh_Expand(node.Nodesj,expandedNodes);else node.Nodes.Clear();AddDirectories(node);else node.Nodes.Clear();AddDirectories(node);,获取已经展开的节点,并把它存放在数组中,将当前展开的节点添加到TreeView并展开它的子节点,获取展开节点,private int Refresh_GetExpanded(TreeNode Node,string ExpandedNodes,int StartIndex)if(StartIndex ExpandedNod
14、es.Length)if(Node.IsExpanded)ExpandedNodesStartIndex=Node.Text;StartIndex+;for(int i=0;i Node.Nodes.Count;i+)StartIndex=Refresh_GetExpanded(Node.Nodesi,ExpandedNodes,StartIndex);return StartIndex;return-1;,若当前节点是展开的,则添加到数组中,递归利用Refresh_GetExpanded()方法添加子节点到数组中,展开原来已经展开的节点,private void Refresh_Expand
15、(TreeNode Node,string ExpandedNodes)for(int i=ExpandedNodes.Length-1;i=0;i-)if(ExpandedNodesi=Node.Text)AddSubDirectories(TreeNode)Node);Node.Expand();for(int j=0;j Node.Nodes.Count;j+)Refresh_Expand(Node.Nodesj,ExpandedNodes);return;,若数组中下标为i的节点就是当前节点,则添加当前节点的子节点,并把当前节点设为展开,同时展开当前节点的子节点,总结,ListView 控件用于以特定样式或视图类型显示列表项,其Items集合对象提供了对其列表项的操作TreeView 控件用于以节点形式显示文本或数据,这些节点按层次结构顺序排列TreeView控件的Nodes集合对象提供了对树型节点的操作,