自定义treeview控件,实现右键菜单编辑功能

试过用复合控件包含treeview控件,但是失败,这次在右键菜单调用tree的回发js成功可以在页面后台绑定被编辑的节点,后台3个函数都可以编辑用c#传的参数e.mynode就是右键菜单的选中的节点

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;
using System.Text;
using System.Drawing.Design;
using System.IO;
 
 
namespace ServerControl1
{
    [Serializable]
    public class TreeViewc : TreeView
    {
        public TreeViewc()
        {
        }
        [Bindable(true)]
        [Category("搜索")]
        [Description("资源(image/css/js)的客户端根目录")]
        public string ClientScriptPath
        {
            get
            {
                String s = (String)ViewState["ClientScriptPath"];
                return ((s == null) ? String.Empty : s);
            }
 
            set
            {
                ViewState["ClientScriptPath"] = value;
            }
        }
        protected override void RaisePostBackEvent(string eventArgument)
        {
           base.RaisePostBackEvent(eventArgument);
            TreeNode tnNode = new TreeNode();
           //  base.RaisePostBackEvent(eventArgument);
            string sa = eventArgument.ToString();
         /*   for (int i = 0; i < this.Nodes.Count; i++)
            {
                if (this.Nodes[i].Value == sa.Substring(sa.IndexOf('=')+1))
                {
                    tnNode = this.Nodes[i];
                }
 
            }*/
            string df = sa.Substring(sa.IndexOf('=') + 1).Replace("\\","/");
            tnNode = this.FindNode(df);
           // tnNode.ChildNodes.Clear();
            if (sa.StartsWith("copy"))
            {
               Oncopynode(new nodeEventArgs(tnNode)); 
            }
            if (sa.StartsWith("paste"))
            {
                Onpastenode(new nodeEventArgs(tnNode));
            }
            if (sa.StartsWith("cut"))
            {
                Oncutnode(new nodeEventArgs(tnNode));
            }
            if (sa.StartsWith("delete"))
            {
                Ondeleteenode(new nodeEventArgs(tnNode));
            }
        }
        public event EventHandler copynode;
        protected virtual void Oncopynode(EventArgs e)
        {
            if (copynode != null)
            {
                copynode(thise);
              //  Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
            }
        }
        public event EventHandler pastenode;
        protected virtual void Onpastenode(EventArgs e)
        {
            if (pastenode != null)
            {
                pastenode(thise);
            //    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
            }
        }
        public event EventHandler addnode;
        protected virtual void Onaddnode(EventArgs e)
        {
            if (addnode != null)
            {
                addnode(thise);
            //    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
            }
        }
        public event EventHandler deleteenode;
        protected virtual void Ondeleteenode(EventArgs e)
        {
            if (deleteenode != null)
            {
                deleteenode(thise);
             //   Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
            }
        }
        public event EventHandler cutnode;
        protected virtual void Oncutnode(EventArgs e)
        {
            if (cutnode != null)
            {
                cutnode(thise);
              //  Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
            }
        }
        /* protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write("控件属性示例, 请从:设计器界面<=>代码视图界面 切换查看效果.");
        }*/
        protected override void Render(HtmlTextWriter output)
        {
            base.Render(output);
            //  this.RenderControl(output);
            output.AddAttribute(HtmlTextWriterAttribute.Id"myMenu");
            output.AddAttribute(HtmlTextWriterAttribute.Class"contextMenu");
            output.RenderBeginTag(HtmlTextWriterTag.Ul);
 
            output.AddAttribute(HtmlTextWriterAttribute.Class"copy");
            output.RenderBeginTag(HtmlTextWriterTag.Li);
            string href2 = Page.ClientScript.GetPostBackClientHyperlink(this"this.svr").Replace("'this.svr'""this.svr");
            output.AddAttribute(HtmlTextWriterAttribute.Hrefhref2);
            output.RenderBeginTag(HtmlTextWriterTag.A);
            // output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
            output.Write("复制");
            output.RenderEndTag();
            output.RenderEndTag();
            output.AddAttribute(HtmlTextWriterAttribute.Class"cut");
            output.RenderBeginTag(HtmlTextWriterTag.Li);
            string href23 = Page.ClientScript.GetPostBackClientHyperlink(this"this.svr").Replace("'this.svr'""this.svr");
            output.AddAttribute(HtmlTextWriterAttribute.Hrefhref23);
            output.RenderBeginTag(HtmlTextWriterTag.A);
            // output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
            output.Write("剪切");
            output.RenderEndTag();
            output.RenderEndTag();
            output.AddAttribute(HtmlTextWriterAttribute.Class"paste");
            output.RenderBeginTag(HtmlTextWriterTag.Li);
            string href233 = Page.ClientScript.GetPostBackClientHyperlink(this"this.svr").Replace("'this.svr'""this.svr");
            output.AddAttribute(HtmlTextWriterAttribute.Hrefhref233);
            output.RenderBeginTag(HtmlTextWriterTag.A);
            // output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
            output.Write("粘贴");
            output.RenderEndTag();
            output.RenderEndTag();
            output.AddAttribute(HtmlTextWriterAttribute.Class"delete");
            output.RenderBeginTag(HtmlTextWriterTag.Li);
            string href = Page.ClientScript.GetPostBackClientHyperlink(this"this.svr").Replace("'this.svr'""this.svr");
            output.AddAttribute(HtmlTextWriterAttribute.Hrefhref);
            output.RenderBeginTag(HtmlTextWriterTag.A);
            // output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
            output.Write("删除");
            output.RenderEndTag();
            output.RenderEndTag();
            output.AddAttribute(HtmlTextWriterAttribute.Class"quit");
            output.RenderBeginTag(HtmlTextWriterTag.Li);
            //  string href3 ="javascript: $('myMenu').hide()";
            //  output.AddAttribute(HtmlTextWriterAttribute.Href, href3);
            //   output.RenderBeginTag(HtmlTextWriterTag.A);
            output.Write("<a href=\"javascript:a()\">取消</a>");
            //  output.Write("新建");
            //  output.RenderEndTag();
            output.RenderEndTag();
            output.RenderEndTag();
            /*           output.Write("控件属性示例, 请从:设计器界面<=>代码视图界面 切换查看效果.");*/
        }
 
        protected override void OnPreRender(EventArgs e)
        {
            string strJSPath = base.ResolveUrl(Path.Combine(this.ClientScriptPath@"treejb.js"));
            if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "treejb"))
            {
                Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "treejb",
                    "<script type='text/javascript' src='" + strJSPath + "'></script>"false);
            }
            base.OnPreRender(e);
        }
 
    }
 
 
}
public static TreeNode StaTreeNode = new TreeNode();

protected void Treecnt1_TextChanged1(object senderEventArgs e)
 {
     this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Prompt",
         "<script language='javascript' >alert('oe');</script>");
 }
 
 protected void TreeViewc1_copynode(object senderEventArgs e)
 {
     StaTreeNode = new TreeNode((e as nodeEventArgs).MyNode.Text,(e as nodeEventArgs).MyNode.Value);
   //  StaTreeNode.ChildNodes.Clear();
    // ViewState["tno"] = (e as nodeEventArgs).MyNode;
     string s = (e as nodeEventArgs).MyNode.Value.ToString();
     string b = s;
   /*  this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Prompt",
              "<script language='javascript' >alert('"+b+"');</script>");*/
 }
 
 protected void TreeViewc1_SelectedNodeChanged(object senderEventArgs e)
 {
     TreeView n = sender as TreeView;
     string sd = n.Nodes.Count.ToString();
   //  int a = 0;
 }
 
 protected void TreeViewc1_pastenode(object senderEventArgs e)
 {
   TreeNode tyh=  (e as nodeEventArgs).MyNode;
     tyh.ChildNodes.Add(StaTreeNode);
     string s = (e as nodeEventArgs).MyNode.Value.ToString();
     string b = s;
    /* this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Prompt",
              "<script language='javascript' >alert('" + b + "');</script>");*/
 }
 
 protected void TreeViewc1_cutnode(object senderEventArgs e)
 {
     StaTreeNode = (e as nodeEventArgs).MyNode;
     StaTreeNode.Parent.ChildNodes.Remove(StaTreeNode);
 }
 
 protected void TreeViewc1_deleteenode(object senderEventArgs e)
 {
     (e as nodeEventArgs).MyNode.Parent.ChildNodes.Remove((e as nodeEventArgs).MyNode);
 }
 
 
     // int a = 0;
var svr;
function a() {
    /* alert(ev.pageX);
     alert('aa')*/
    $("#myMenu").css({
        "display""none"
    })
}
 
$(document).ready(function() {
    //  alert($("#myMenu"))
    var f = $("#TreeViewc1").find("a");
    //  alert(m.length);
    //    var f = m.filter("a");
   //  alert(f.length);
    for (var i = 0; i < f.length; i++) {
        // alert(f[i].id)
        f[i].oncontextmenu = function(ev) {
            // alert(ev.pageX);
            //  svr = ev.currentTarget.innerHTML;
            svr = ev.currentTarget.href;
            //  alert(svr);
 
            /* $("#myMenu").style.display = "block";
            $("#myMenu").style.left = ev.pageX;
            $("#myMenu").style.top = ev.pageY;*/
            $("#myMenu").css({
                "display""block",
                "left": ev.pageX,
                "top":
                    ev.pageY
            })
            $(".copy").children("a").attr("href", svr.replace(",'s"",'copy="));
            $(".cut").children("a").attr("href", svr.replace(",'s"",'cut="));
            $(".paste").children("a").attr("href", svr.replace(",'s"",'paste="));
            $(".delete").children("a").attr("href", svr.replace(",'s"",'delete="));
            return false;
 
        }
    }
 
});
/* Generic context menu styles */
.contextMenu {
	positionabsolute;
	width120px;
	z-index99999;
	bordersolid 1px #CCC;
	background#EEE;
	padding0px;
	margin0px;
	displaynone;
}
 
.contextMenu LI {
	list-stylenone;
	padding0px;
	margin0px;
}
 
.contextMenu A {
	color#333;
	text-decorationnone;
	displayblock;
	line-height20px;
	height20px;
	background-position6px center;
	background-repeatno-repeat;
	outlinenone;
	padding1px 5px;
	padding-left28px;
}
 
.contextMenu LI.hover A {
	color#FFF;
	background-color#3399FF;
}
 
.contextMenu LI.disabled A {
	color#AAA;
	cursordefault;
}
 
.contextMenu LI.hover.disabled A {
	background-colortransparent;
}
 
.contextMenu LI.separator {
	border-topsolid 1px #CCC;
}
 
/*
	Adding Icons
	
	You can add icons to the context menu by adding
	classes to the respective LI element(s)
*/
 
.contextMenu LI.edit A { background-imageurl(images/page_white_edit.png); }
.contextMenu LI.cut A { background-imageurl(images/cut.png); }
.contextMenu LI.copy A { background-imageurl(images/page_white_copy.png); }
.contextMenu LI.paste A { background-imageurl(images/page_white_paste.png); }
.contextMenu LI.delete A { background-imageurl(images/page_white_delete.png); }
.contextMenu LI.quit A { background-imageurl(images/door.png); }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值