ASP NET+TreeView树型菜单操作实例(代码调试通过)
- 格式:doc
- 大小:41.50 KB
- 文档页数:10
移动端实现树级菜单的方法全文共四篇示例,供读者参考第一篇示例:在移动端开发中,实现树级菜单是一项常见且重要的任务。
在移动设备上,由于屏幕空间有限,设计和实现树级菜单需要考虑到用户体验和界面布局的限制。
本文将介绍一些常见的方法和技巧来实现移动端的树级菜单。
一、使用折叠菜单折叠菜单是一种常见的树级菜单设计模式,适用于移动设备上的界面。
在折叠菜单中,每个父级菜单项下面可以展开或折叠多个子级菜单项,用户可以点击父级菜单项来展开或折叠子级菜单项。
这种设计模式节省了屏幕空间,并且用户可以方便地浏览和操作树状结构的数据。
在实现折叠菜单时,可以使用HTML、CSS和JavaScript来构建。
可以使用HTML的ul和li标签来表示菜单的层级结构,使用CSS样式来控制菜单的外观和布局,使用JavaScript来添加交互效果和实现菜单的展开和折叠功能。
通过合理的布局和样式设计,可以在移动设备上呈现出清晰、易用的树级菜单。
二、利用滑动菜单在实现滑动菜单时,可以利用现有的移动端UI框架或库来快速实现。
一些流行的移动端UI框架,如jQuery Mobile、Ionic等,提供了丰富的界面组件和交互效果,可以帮助开发人员快速构建滑动菜单。
通过合理的布局和交互设计,可以让滑动菜单在移动设备上呈现出流畅、直观的用户体验。
三、响应式设计在设计移动端树级菜单时,需要考虑到不同设备屏幕大小和分辨率的差异。
为了适应不同尺寸的移动设备,可以使用响应式设计的技术来实现自适应的界面布局。
通过使用CSS媒体查询和弹性布局等技术,可以让树级菜单在不同尺寸的屏幕上自动调整布局和样式,确保用户在任何设备上都能够方便地访问和操作菜单。
在移动端实现树级菜单时,需要综合考虑用户体验、界面设计和技术实现等多方面因素。
通过选择合适的设计模式、利用现有的UI框架和工具、采用响应式设计等方法,可以实现一个优秀的移动端树级菜单,为用户提供更好的导航和操作体验。
希望本文介绍的方法和技巧能够帮助开发人员更好地实现移动端树级菜单。
TreeView控件添加、删除、重命名、上移、下移节点Public Class Form1Inherits System.Windows.Forms.Form#Region " Windows 窗体设计器生成的代码 "Public Sub New()MyBase.New()'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()'在 InitializeComponent() 调用之后添加任何初始化End Sub'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)If disposing ThenIf Not (components Is Nothing) Thencomponents.Dispose()End IfEnd IfMyBase.Dispose(disposing)End Sub'Windows 窗体设计器所必需的Private components As ponentModel.IContainer '注意: 以下过程是 Windows 窗体设计器所必需的'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents TreeView1 As System.Windows.Forms.TreeViewFriend WithEvents ContextMenu1 As System.Windows.Forms.ContextMenuFriend WithEvents createItems As System.Windows.Forms.MenuItemFriend WithEvents renameItems As System.Windows.Forms.MenuItemFriend WithEvents delSelectedNode As System.Windows.Forms.MenuItemFriend WithEvents newRootNode As System.Windows.Forms.MenuItemFriend WithEvents PreSelectedNode As System.Windows.Forms.MenuItemFriend WithEvents NextSelectedNode As System.Windows.Forms.MenuItem<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Me.TreeView1 = New System.Windows.Forms.TreeViewMe.ContextMenu1 = New System.Windows.Forms.ContextMenuMe.newRootNode = New System.Windows.Forms.MenuItem Me.createItems = New System.Windows.Forms.MenuItemMe.renameItems = New System.Windows.Forms.MenuItem Me.delSelectedNode = New System.Windows.Forms.MenuItemMe.PreSelectedNode = New System.Windows.Forms.MenuItemMe.NextSelectedNode = New System.Windows.Forms.MenuItemMe.SuspendLayout()''TreeView1'Me.TreeView1.ContextMenu = Me.ContextMenu1Me.TreeView1.Dock = System.Windows.Forms.DockStyle.LeftMe.TreeView1.ImageIndex = -1belEdit = TrueMe.TreeView1.Location = New System.Drawing.Point(0, 0) = "TreeView1"Me.TreeView1.Nodes.AddRange(NewSystem.Windows.Forms.TreeNode() {New System.Windows.Forms.TreeNode("节点0", New System.Windows.Forms.TreeNode() {New System.Windows.Forms.TreeNode("节点2", New System.Windows.Forms.TreeNode() {New System.Windows.Forms.TreeNode("节点3")})}), New System.Windows.Forms.TreeNode("节点1")})Me.TreeView1.SelectedImageIndex = -1Me.TreeView1.Size = New System.Drawing.Size(121, 273)Me.TreeView1.TabIndex = 0''ContextMenu1'Me.ContextMenu1.MenuItems.AddRange(NewSystem.Windows.Forms.MenuItem() {Me.newRootNode, Me.createItems, Me.renameItems, Me.delSelectedNode, Me.PreSelectedNode, Me.NextSelectedNode})''newRootNode'Me.newRootNode.Index = 0Me.newRootNode.Text = "新建根节点"''createItems'Me.createItems.Index = 1Me.createItems.Text = "新建子节点"''renameItems'Me.renameItems.Index = 2Me.renameItems.T ext = "重命名节点"''delSelectedNode'Me.delSelectedNode.Index = 3Me.delSelectedNode.Text = "删除当前节点"''PreSelectedNode'Me.PreSelectedNode.Index = 4Me.PreSelectedNode.Text = "上移该节点"''NextSelectedNode'Me.NextSelectedNode.Index = 5Me.NextSelectedNode.Text = "下移该节点"''Form1'Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) Me.ClientSize = New System.Drawing.Size(292, 273)Me.Controls.Add(Me.TreeView1) = "Form1"Me.Text = "Form1"Me.ResumeLayout(False)End Sub#End RegionPrivate Sub createItems_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles createItems.Click If TreeView1.SelectedNode Is Nothing ThenElseDim childNode As New TreeNodechildNode.Text = "新建子节点"TreeView1.SelectedNode.Nodes.Insert(0, childNode)TreeView1.SelectedNode.Expand()childNode.BeginEdit()TreeView1.SelectedNode = childNodeEnd IfEnd SubPrivate Sub TreeView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TreeView1.MouseDownIf e.Button = MouseButtons.Right Then '获取当前制定的节点Dim ClickPoint As New Point(e.X, e.Y)TreeView1.SelectedNode = TreeView1.GetNodeAt(ClickPoint) End IfEnd SubPrivate Sub renameItems_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles renameItems.ClickIf TreeView1.SelectedNode Is Nothing ThenElseTreeView1.SelectedNode.BeginEdit()End IfEnd SubPrivate Sub delSelectedNode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delSelectedNode.ClickIf TreeView1.SelectedNode Is Nothing ThenElseTreeView1.SelectedNode.Remove()End IfEnd SubPrivate Sub newRootNode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles newRootNode.ClickDim rootNode As New TreeNoderootNode.Text = "新建根节点"TreeView1.Nodes.Insert(0, rootNode)rootNode.BeginEdit()End SubPrivate Sub PreSelectedNode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PreSelectedNode.ClickIf TreeView1.SelectedNode Is Nothing ThenElse '存在选中的节点则执行下面的动作Dim tempNode As New TreeNodetempNode = TreeView1.SelectedNode.PrevNodeIf tempNode Is Nothing ThenElse '上一个节点存在则执行下面的动作TreeView1.SelectedNode.PrevNode.Remove()Dim myTab As IntegermyTab = TreeView1.SelectedNode.Index + 1If TreeView1.SelectedNode.Parent Is Nothing ThenTreeView1.Nodes.Insert(myTab, tempNode)ElseTreeView1.SelectedNode.Parent.Nodes.Insert(myTab, tempNode)End IfEnd IfEnd IfEnd SubPrivate Sub NextSelectedNode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NextSelectedNode.ClickIf TreeView1.SelectedNode Is Nothing ThenElse '存在选中的节点则执行下面的动作Dim tempNode As New TreeNodetempNode = TreeView1.SelectedNode.NextNodeIf tempNode Is Nothing ThenElse '上一个节点存在则执行下面的动作TreeView1.SelectedNode.NextNode.Remove()Dim myTab As IntegermyTab = TreeView1.SelectedNode.Index - 1If TreeView1.SelectedNode.Parent Is Nothing ThenTreeView1.Nodes.Insert(myTab, tempNode)ElseTreeView1.SelectedNode.Parent.Nodes.Insert(myTab, tempNode)End IfEnd IfEnd If End Sub End Class。
Winform开发常⽤控件之TreeView菜单导航和权限⽤法TreeView⼀个很棒的控件,我们在做WEB开发时常常犯困的⼀个东东。
当然这⾥介绍winform⾥⾯的⽤法唠。
先介绍⼏个属性吧,CheckBoxes设置为true的话树形节点前⾯会出现checkbox勾选框、ImageList绑定树形⾥⾯的图标(界⾯上放⼀个Imgelist控件,绑定上即可)、ShowLines(树形展开时显⽰线条)等等哦,这个⽅法好,this.MenutreeView.ExpandAll();即Treeview加载后全部展开。
下⾯先介绍⼀个简单的菜单⽤法1、TreeView节点的设置和选取节点TreeView静态节点的设置⽅法很简单,主要⽤在软件的快捷导航中。
贴图,可以设置多级节点,每个节点设置Name和Text属性即可,如果觉得不美观,可以放⼀些图标。
本例中的图标是⽤ImageList绑定到⾥⾯的,还是⽐较简单。
设置好节点后,就可以写节点的事件了,贴代码///<summary>///树形⽬录菜单///</summary>///<param name="sender"></param>///<param name="e"></param>/// AfterSelect事件是点击节点时的事件private void MenutreeView_AfterSelect(object sender, TreeViewEventArgs e){string nodeselect = ;switch (nodeselect){case"⽤户管理": ShowUsermanager(); break;case"竞赛项⽬管理": ShowItemFrm(); break;case"参赛单位管理": ShowDepartFrm(); break;case"运动员信息": ShowMemberInfoFrm(); break;case"代表队名单": ShowMatchTeamFrm(); break;case"随机分组": ShowRandomGroupFrm(); break;case"分组信息": ShowGroupInfoFrm(); break;case"评分管理": ShowPointFrm(); break;case"成绩管理": ShowScoreFrm(); break;default: break;}}看到了吧,还是⽐较简单,case到以后,执⾏相应的⽅法即可,本例中主要是show⼀些窗⼝。
22树形列表控件(Treeview)树形列表控件(Treeviw)实现了一种层次化的结构数据,用户可以用鼠标打开或者隐藏相应数据或者节点。
Treeview是没有根节点的,每一层都可以有很多的节点。
经典的使用场景有:(1)表格类似于其他语言的Grid控件,或者Excel表格。
可以行列的形式展示数据。
(2)目录列表实现文件目录的管理,可以展开或者折叠显示目录以及文件。
Treeview有关的概念:(1)item在Treeview中显示的每一个内容,都被定义为item,和Excel中cell的概念类似。
每一个item 可以有一个文字的内容或者图片内容,这些内容是最终展现在控件中的。
(2)iid每一个item都有唯一的一个字符串标识iid。
可以用户自己定义,也可以使用系统设定的值。
需要注意的是,iid必须是唯一的,不可重复的。
(3)childchild其实也是item,不过它的含义是指定item的子项。
比如item是一个目录,那么它的下面的文件以及子目录就是此item的child。
通常在遍历整个Treeview控件的时候,child会被用到。
(4)parentparent与child类似,不过是指定item的父控件。
相当于父目录。
(5)ancestorancestor是指定item的从第一层节点到它的父节点的集合,也就是它的所有的上层节点的集合。
(6)visible指定的item是否可见。
比如在表格中,有些行或者列会被隐藏。
不过第一层节点总是可见的。
(7)descendant与ancestor类似,不过是指定item的从子节点一直到最后一层节点的集合。
(8)tagitem还可以有别名。
不同的item可以有相同的别名。
这样好处是可以给同样属性的item一起赋值。
比如,目录名称用斜体表示,而文件名称用正常的字体显示。
只有给所有的代表目录的item的tag赋值为’directory’,而代表文件的item的tag赋值为’file’,就可以很分别的实现上面的功能,而不需要为每一个item进行单独的赋值。
Treeview只展开一个节点,其他节点关闭 2.0 的 TreeView 控件功能虽说强大,但其客户端控制很逊色,本文将讲解 TreeView 的客户端实现原理,并实现两个个性化操作:(1) 节点的全部打开和关闭;Client Side Expand/Collapse All Nodes For 2.0 TreeView.(2) 只打开一个节点(关闭其他兄弟节点)。
Just one expanded node in 2.0 TreeView (When a client expand one node all other will collaps)用记事本打开页面源代码,可以找到一下两个脚本引用:<scriptsrc="/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw 2&t=633300220640000000"type="text/javascript"></script><scriptsrc="/WebUI/WebResource.axd?d=JuTdJhq3NM8Jq_RhssAkEg2 &t=633300220640000000" type="text/javascript"></script> 将"/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&a mp;t=633300220640000000"拷到地址栏尾,下载脚本,并以 .js 命名,另一个同样操作。
分析第二个脚本文件,可以看到TreeView的很多客户端函数,其中关键的一个TreeView_ToggleNode 就是客户端点击时触发的事件。
要想做个性化的操作,就得从TreeView_ToggleNode 事件下手。
TreeView树型菜单操作实例(代码调试通过)本实例完成TreeView树型菜单添加,修改,删除,绑定DropDownList功能,移动功能读者可以自行书写.aspx代码<form id="Form1" method="post" runat="server"><FONT face="宋体"><TABLE id="Table1" cellSpacing="1" cellPadding="1"width="700" border="1"><TR><TD style="WIDTH: 168px"></TD><TD>TreeView操作实例</TD></TR><TR><TD style="WIDTH: 168px" vAlign="top"><iewc:TreeView id="TreeView1"runat="server"></iewc:TreeView></TD><TD vAlign="top"><TABLE id="Table2" cellSpacing="1"cellPadding="1" width="100%" border="0"><TR><TD>节点名<asp:TextBoxid="TextBox1" runat="server"></asp:TextBox></TD></TR><TR><TD><asp:Buttonid="addButton" runat="server" Text="添加"></asp:Button><asp:Buttonid="editButton" runat="server" Text="修改"></asp:Button><asp:Buttonid="delButton" runat="server" Text="删除"></asp:Button></TD></TR><TR><TD>移动节点</TD></TR><TR><TD>要移动到的节点<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList></TD> </TR><TR><TD><asp:Buttonid="moveButton" runat="server" Text="移动"></asp:Button></TD></TR></TABLE></TD></TR><TR><TD style="WIDTH: 168px"></TD><TD></TD></TR></TABLE></FONT></form>.aspx.cs后台代码protected Microsoft.Web.UI.WebControls.TreeView TreeView1;public string returnvalue="";//递归存储值private void Page_Load(object sender, System.EventArgs e){// 在此处放置用户代码以初始化页面if(!Page.IsPostBack){Button del=new Button();del=(Button)Page.FindControl("delButton");del.Attributes.Add("onclick","return confirm('确定删除');");showlist();}}private void showlist(){//绑定TreeView//infobase io=new infobase();DropDownList1.Items.Clear();ListItem list=new ListItem();list.Value="0";list.Text="全部类别";DropDownList1.Items.Add(list);DropDownListBind(0,DropDownList1);//添加根节点TreeView1.Nodes.Clear();TreeNode node=new TreeNode();node.Text="类别列表";node.Target="0";node.Expanded=true;TreeView1.Nodes.Add(node);treeShow(0,node);TreeView1.DataBind();}private void DropDownListBind(int parterid,DropDownList droplist){//递归类别 DataSet ds=returnDataset(parterid);if(ds!=null){for(int i=0;i<ds.Tables[0].Rows.Count;i++){ListItem list=new ListItem();if (ds.Tables[0].Rows[i]["depth"].ToString()=="0"){list.Text=ds.Tables[0].Rows[i]["name"].ToString();}else{string depth="";//for(i=1;i<Int32.Parse(ds.Tables[0].Rows[i]["depth"].ToString());i++){depth+="--";//}list.Text=depth+ds.Tables[0].Rows[i]["name"].ToString();}list.Value=ds.Tables[0].Rows[i]["id"].ToString();droplist.Items.Add(list);DataSet ds2=returnDataset(Int32.Parse(ds.Tables[0].Rows[i]["id"].ToString()));if(ds2.Tables[0].Rows.Count>0){DropDownListBind(Int32.Parse(ds.Tables[0].Rows[i]["id"].ToString()),DropDownList1);}}}}private void treeShow(int parterid,TreeNode treenode){//递归类别 //DataSet ds=returnDataset(parterid);if (ds!=null){for(int i=0;i<ds.Tables[0].Rows.Count;i++){TreeNode node=new TreeNode();node.Target=ds.Tables[0].Rows[i]["id"].ToString();node.Text=ds.Tables[0].Rows[i]["name"].ToString();treenode.Nodes.Add(node);node.Expanded=true;DataSet ds2=returnDataset(Int32.Parse(ds.Tables[0].Rows[i]["id"].ToString()));if (ds2.Tables[0].Rows.Count>0){treeShow(Int32.Parse(ds.Tables[0].Rows[i]["id"].ToString()),node);}}}}private DataSet returnDataset(int parterid){OleDbConnection conn=new OleDbConnection();conn.ConnectionString="provider=microsoft.jet.oledb.4.0;datasource="+Server.MapPath("Data.mdb");OleDbDataAdapter cmd;DataSet ds=new DataSet();try{conn.Open();cmd=new OleDbDataAdapter("select * from treeview whereparterid="+parterid+" order by createtime asc",conn);cmd.Fill(ds);}catch(Exception ex){Response.Write(ex.ToString());Response.End();}finally{conn.Dispose();}return ds;}private void addButton_Click(object sender, System.EventArgs e) {//添加节点if (TextBox1.Text!=""){TreeNode treenode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);string[] treedepth=treenode.GetNodeIndex().Split('.');if(treenode.Target!=null)int depth=treedepth.Length-1;//获得深度int parterid=Int32.Parse(treenode.Target);//获得父类IDstring classname=TextBox1.Text;//获得类名OleDbConnection conn=new OleDbConnection();conn.ConnectionString="provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath("Data.mdb");conn.Open();OleDbCommand cmd=new OleDbCommand();mandType=CommandType.Text;cmd.Connection=conn;mandText="insert into treeview(name,parterid,depth)values('"+classname+"',"+parterid+","+depth+")";try{cmd.ExecuteNonQuery();Response.Write("<script>alert('添加成功');location.href='TreeViewStudy.aspx';</script>");Response.End();}catch(Exception ex){Response.Write(ex.ToString());Response.End();}finally{cmd.Dispose();conn.Dispose();}}else{//Response.Write(treenode.Target+"123<br>");}else{Response.Write("请填写类别并选择节点");}}private void editButton_Click(object sender, System.EventArgs e){//修改节点if (TextBox1.Text!=""){TreeNode treenode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);int id=Int32.Parse(treenode.Target);string classname=TextBox1.Text;if(treenode.Target!=null){OleDbConnection conn=new OleDbConnection();conn.ConnectionString="provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath("Data.mdb");conn.Open();OleDbCommand cmd=new OleDbCommand();mandType=CommandType.Text;cmd.Connection=conn;mandText="update treeview setname='"+classname+"' where id="+id;try{cmd.ExecuteNonQuery();Response.Write("<script>alert('修改成功');location.href='TreeViewStudy.aspx';</script>");Response.End();}catch(Exception ex){Response.Write(ex.ToString());Response.End();}finally{cmd.Dispose();conn.Dispose();}}else{}}else{Response.Write("请填写类别并选择节点");}}private void delButton_Click(object sender, System.EventArgs e) {//删除TreeNode treenode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);int id=Int32.Parse(treenode.Target);//Response.Write(id.ToString()+"<br>");string tmpid="";tmpid=id.ToString()+allid(treenode.Nodes).ToString();//Response.Write(tmpid);//Response.End();if (treenode.Target!="0"){OleDbConnection conn=new OleDbConnection();conn.ConnectionString="provider=microsoft.jet.oledb.4.0;datasource="+Server.MapPath("Data.mdb");conn.Open();OleDbCommand cmd=new OleDbCommand();mandType=CommandType.Text;cmd.Connection=conn;mandText="delete * from treeview where id in("+tmpid+")";try{cmd.ExecuteNonQuery();Response.Write("<script>alert('删除成功');location.href='TreeViewStudy.aspx';</script>");Response.End();}catch(Exception ex){Response.Write(ex.ToString());Response.End();}finally{cmd.Dispose();conn.Dispose();}}else{Response.Write("不能删除根节点");}}private string allid(TreeNodeCollection tnc){//遍历TreeView节点(递归算法)foreach(TreeNode node in tnc){if(node.Nodes.Count!=0){returnvalue+=","+node.Target;//Response.Write(node.Text+node.Target+"<br>");allid(node.Nodes);}else{//Response.Write(node.Text+node.Target+"<br>");returnvalue+=","+node.Target;}}return returnvalue;}private void moveButton_Click(object sender, System.EventArgs e) {//移动//此功能实现的时候需要考虑移动中所有类的深度是否有子类问题 }。