asp.net treeview右键菜单

jy0292000 2009-03-30 02:20:39
各位高手asp.net treeview右键菜单如何实现的?有具体的代码不?我想在我的tree中选中子节点右键弹出菜单。。像contextmenustrip这些控件在asp.net有用不了,听说可以用脚本。高手给个指点。还有一个问题,我的tree要实现不同用户看到的级别不一样,这个又是如何实现的呢?
...全文
1537 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangminqi 2009-11-06
  • 打赏
  • 举报
回复
网页可以加右键菜单的吗?记得在网页上右键会弹出浏览器菜单的,如果不在系统中写注册表,怎么改浏览器右键菜单呢?如何实现?我学习一下!

http://www.mybuffet.cn
tlmiai 2009-11-06
  • 打赏
  • 举报
回复
关注
jiejie526 2009-03-31
  • 打赏
  • 举报
回复
占位
gongsun 2009-03-31
  • 打赏
  • 举报
回复
up
zzxap 2009-03-31
  • 打赏
  • 举报
回复
[code=C#]
接上
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//判断是否点击了某个节点
this.selectnode= this.treeView1.GetNodeAt (e.X ,e.Y );
if(selectnode==null)
this.isselected=false;
else
this.isselected=true;
}
private void menuAdd_Click(object sender, System.EventArgs e)
{//判断是否点击了某个节点,若没有点击了,则是新增一个树节点
if(isselected==false)
{//算出新增树节点的ID值
maxnodeid=GetMaxNodeid();
TreeNode tmpNd=new TreeNode();
//赋值
tmpNd.Tag=this.maxnodeid.ToString();
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{//取到新增树节点的文本值
tmpNd.Text=frmCommon.strcomm;
this.strcomm=frmCommon.strcomm;
//新增树节点
this.treeView1.Nodes.Add(tmpNd);
//插入数据库(说明插入的是树节点)
this.insert("root");
//展开
this.selectnode.Expand();
}
}
else
{//判断是否点击了某个节点,若点击了,则是新增一个子节点
this.contextAddSub();
}
}
private void contextAddSub()
{//得到新增子节点的ID值
maxnodeid=GetMaxNodeid();
TreeNode tmpNd=new TreeNode();
//赋值
tmpNd.Tag=this.maxnodeid.ToString();
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{//取到新增树节点的文本值
tmpNd.Text=frmCommon.strcomm;
this.strcomm=frmCommon.strcomm;
//新增子节点
this.selectnode.Nodes.Add(tmpNd);
//插入数据库(说明插入的是子节点)
this.insert("sub");
//展开
this.treeView1.SelectedNode.Expand();
}
}
//删除节点操作
private void menuDel_Click(object sender, System.EventArgs e)
{//新建一个ArrayList,用于保存要删除的节点下边的所有子节点
list=new ArrayList();
if(this.isselected==true)
{//得到删除的节点下边的所有子节点
getallnode(this.selectnode);
//把要删除的节点也加进去
list.Add(this.selectnode.Tag.ToString());
//循环从数据库中删除
for(int i=0;i{
string strdel="delete s_menu where nodeid='{0}'";
string strformat="";
strformat=string.Format(strdel,list[i]);
SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();
}
//从树中删除
this.selectnode.Remove();
}
}
//修改节点的值
private void menuEdit_Click(object sender, System.EventArgs e)
{
if(this.isselected==true)
{
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{
string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";
string strformat="";
strformat=string.Format(strdel,this.selectnode.Tag.ToString(),frmCommon.strcomm);
SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();
this.selectnode.Text=frmCommon.strcomm;
}
}
}
//遍历所有节点.查找值
private void getvaluenode(TreeNodeCollection tn,string value)
{
foreach(TreeNode node in tn)
{
if(node.Nodes.Count>0)
{
getvaluenode(node.Nodes,value);
}
if(node.Text==value)
listnode.Add(node);
}
}
private void menuSearch_Click(object sender, System.EventArgs e)
{
int j,k;
this.listnode=new ArrayList();
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{
TreeNode n =new TreeNode();
TreeNode temp=new TreeNode();
//下面的函数是填充listnode;
getvaluenode(this.treeView1.Nodes,frmCommon.strcomm);
for(int i=0;i{
j=0;k=0;
n=(TreeNode)listnode[i];
if (n != null)
{
temp=n;
//得到上面结点的数量,并将数量保存到变量j;
for(;n.Parent!=null;)
{
n=n.Parent;
j++;
}
//恢复原值
n=temp;
//新建一个树结点数组做保存得到查询到的所有节点.
TreeNode[] m=new TreeNode[j];
for(;n.Parent!=null;)
{
n=n.Parent;
m[k]=n;
k++;
}
for(int p=0;pm[p].Expand();
n=temp;
n.ForeColor=Color.Red;
}
}
}
}
private void treeView1_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
{
if(this.treeView1.SelectedNode.Text!=null)
{
string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";
string strformat="";strformat=string.Format(strdel,this.treeView1.SelectedNode.Tag.ToString(),e.Label.ToString());SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();

}
}
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
this.listBox1.Items.Clear();
this.listBox1.Items.Add(this.treeView1.SelectedNode.FullPath.ToString());
}
}
}


//formCommon.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace Tree
{
///
/// FormCommon 的摘要说明。
///
public class FormCommon : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox txtCommon;
private System.Windows.Forms.Button btnOK;
///
/// 必需的设计器变量。
///
private System.ComponentModel.Container components = null;
public string strcomm;
public FormCommon()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.txtCommon = new System.Windows.Forms.TextBox();
this.btnOK = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// txtCommon
//
this.txtCommon.Location = new System.Drawing.Point(36, 16);
this.txtCommon.Name = "txtCommon";
this.txtCommon.TabIndex = 0;
this.txtCommon.Text = "";
//
// btnOK
//
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOK.Location = new System.Drawing.Point(48, 52);
this.btnOK.Name = "btnOK";
this.btnOK.TabIndex = 1;
this.btnOK.Text = "确定";
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// FormCommon
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(176, 98);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.txtCommon);
this.Name = "FormCommon";
this.Text = "FormCommon";
this.ResumeLayout(false);

}
#endregion

private void btnOK_Click(object sender, System.EventArgs e)
{
if(this.txtCommon.Text=="")
{
MessageBox.Show("不能为空");
this.DialogResult=DialogResult.None;
}
else
this.strcomm=this.txtCommon.Text;
}
}
}
//配置文件App.Config
//数据库脚本
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[S_Menu]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[S_Menu]
GO

CREATE TABLE [dbo].[S_Menu] (
[NodeId] [char] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[ParentId] [char] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[NodeName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO______________________________
Nodeid parentid nodename
10000 0 湖北省
10001 10000 武汉市
10002 10000 宜昌市
10003 0 广东省
[/CODE]
zzxap 2009-03-31
  • 打赏
  • 举报
回复

TreeView右键菜单从数据库中读取,插入,删除,查找(高亮显示并
TreeView右键菜单从数据库中读取,插入,删除,查找(高亮显示并展开),编辑(即地编辑)的例子
这个项目包括二个文件,分别为From1.cs and FormCommon.cs,一个配置文件App.config
Form1.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace Tree
{
///
/// Form1 的摘要说明。
///
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TreeView treeView1;
private System.Data.SqlClient.SqlConnection sqlConnection1;
///
/// 必需的设计器变量。
///
private System.ComponentModel.Container components = null;
private System.Windows.Forms.ContextMenu contextMenu1;
private System.Windows.Forms.MenuItem menuAdd;
private System.Windows.Forms.MenuItem menuDel;
private System.Windows.Forms.MenuItem menuEdit;
private System.Windows.Forms.MenuItem menuSearch;
private ArrayList list;
private ArrayList listnode;
private string strcomm;
private bool isselected=true;
private System.Windows.Forms.ListBox listBox1;
private TreeNode selectnode ;

public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.contextMenu1 = new System.Windows.Forms.ContextMenu();
this.menuAdd = new System.Windows.Forms.MenuItem();
this.menuDel = new System.Windows.Forms.MenuItem();
this.menuEdit = new System.Windows.Forms.MenuItem();
this.menuSearch = new System.Windows.Forms.MenuItem();
this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
this.listBox1 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.AllowDrop = true;
this.treeView1.ContextMenu = this.contextMenu1;
this.treeView1.HotTracking = true;
this.treeView1.ImageIndex = -1;
this.treeView1.LabelEdit = true;
this.treeView1.Location = new System.Drawing.Point(16, 16);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(200, 388);
this.treeView1.TabIndex = 0;
this.treeView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeView1_MouseDown);
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
this.treeView1.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView1_AfterLabelEdit);
//
// contextMenu1
//
this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuAdd,
this.menuDel,
this.menuEdit,
this.menuSearch});
//
// menuAdd
//
this.menuAdd.Index = 0;
this.menuAdd.Text = "新增";
this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click);
//
// menuDel
//
this.menuDel.Index = 1;
this.menuDel.Text = "删除";
this.menuDel.Click += new System.EventHandler(this.menuDel_Click);
//
// menuEdit
//
this.menuEdit.Index = 2;
this.menuEdit.Text = "编辑";
this.menuEdit.Click += new System.EventHandler(this.menuEdit_Click);
//
// menuSearch
//
this.menuSearch.Index = 3;
this.menuSearch.Text = "查找";
this.menuSearch.Click += new System.EventHandler(this.menuSearch_Click);
//
// listBox1
//
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(244, 20);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(288, 376);
this.listBox1.TabIndex = 1;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(564, 422);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.treeView1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion

///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private DataSet ds;
private SqlDataAdapter sqlDataAdapter1;
private int maxnodeid;

private void Form1_Load(object sender, System.EventArgs e)
{
string strconn=ConfigurationSettings.AppSettings["ConnStr"];
sqlConnection1 = new SqlConnection(strconn);
this.sqlConnection1.Open();
//填充DataSet
this.CreateDataSet();
//从数据库中读取数据,通过递归生成树。
InitTree(this.treeView1.Nodes,"0");

}


private void CreateDataSet()
{
this.sqlDataAdapter1=new SqlDataAdapter("select * from s_menu ",this.sqlConnection1);
this.ds=new DataSet();
this.sqlDataAdapter1.Fill(ds,"tree");
}
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter="ParentId='" + parentId + "'" ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.Tag=drv["NodeId"].ToString();
tmpNd.Text=drv["NodeName"].ToString();
Nds.Add(tmpNd);
intId=drv["ParentId"].ToString();
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());
}
}
//新增节点操作
private void insert(string type)
{//判断是新增树节点,还是子节点.
string strinsert="insert into s_menu values('{0}','{1}','{2}')";
string strformat="";
if(type=="sub")
strformat=string.Format(strinsert,maxnodeid.ToString(),this.selectnode.Tag.ToString(),this.strcomm);
else
strformat=string.Format(strinsert,maxnodeid.ToString(),"0",this.strcomm);
SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();
}
//为新增节点算出最大的节点值,并以此值作为新增的节点ID值
private int GetMaxNodeid()
{
int pre=0,last=0;
DataSet maxds=new DataSet();
this.sqlDataAdapter1=new SqlDataAdapter("select nodeid from s_menu order by nodeid",this.sqlConnection1);
this.sqlDataAdapter1.Fill(maxds);
for(int i=0;i{
if(i+1{
pre=int.Parse(maxds.Tables[0].Rows[i][0].ToString());
last=int.Parse(maxds.Tables[0].Rows[i+1][0].ToString());
if(last-pre!=1)
return pre+1;
}
}
return last+1;
}
private void getallnode(TreeNode tn)
{
foreach(TreeNode node in tn.Nodes)
{
list.Add(node.Tag.ToString());
if(node.Nodes.Count>0)
{
getallnode(node);
}
}
}


xuan.ye 2009-03-31
  • 打赏
  • 举报
回复
用ext能实现,treeview不太清楚
glpizi 2009-03-31
  • 打赏
  • 举报
回复
推荐你去www.telerik.com,那里面有你想要的效果!
glpizi 2009-03-31
  • 打赏
  • 举报
回复
推荐你去www.telerik.com,那里面有你想要的效果!
wuyq11 2009-03-30
  • 打赏
  • 举报
回复
Context Menu实现
http://www.cnblogs.com/blodfox777/archive/2008/08/29/1279675.html
http://www.cnblogs.com/weiweictgu/archive/2006/04/17/377050.html
jy0292000 2009-03-30
  • 打赏
  • 举报
回复
concontextmenu只能在form里用吧???
cpp2017 2009-03-30
  • 打赏
  • 举报
回复
oncontextmenu是可以用的.

做个权限配置,显示树的时候关联权限表,然后查询相关的数据来显示树
LuanQiBaZao0 2009-03-30
  • 打赏
  • 举报
回复
up

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧