asp.net XPPanel管理菜单

来源:互联网 发布:烈火交友软件下载 编辑:程序博客网 时间:2024/05/29 13:52

最近做project需要用到类似XPPanel的管理菜单,找了N久也没找到比较合适的,于是乎自己动手,丰衣足食,写了个控件,记录下来以做资料

Link.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace NetSharp.WebControl.Explore
{
    
/// <summary>
    
/// Summary description for Link
    
/// </summary>

    public class Link
    
{
        
constructor


        
private properties


        
public properties
    }


    
/// <summary>
    
/// Collection Class of Link_Collection
    
/// </summary>

    public class Link_Collection : ArrayList
    
{
        
/// <summary>
        
/// adds an item
        
/// </summary>
        
/// <param name="item">an object of Colour class</param>

        public void Add(Link item)
        
{
            
base.Add(item);
        }

        
//End of Add


        
/// <summary>
        
/// returns data according to given index
        
/// </summary>

        public new Link this[int nIndex]
        
{
            
get
            
{
                
return (Link)base[nIndex];
            }

        }

    }

    
//End of class Link_Collection
}

LinKGroup.cs

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Threading;

namespace NetSharp.WebControl.Explore
{
    
/// <summary>
    
/// XPPanel单个分组
    
/// </summary>

    public class LinkGroup
    
{
        
constrctor


        
private properties


        
public properties


        
Public methods
    }



    
/// <summary>
    
/// Collection Class of LinkGroup_Collection
    
/// </summary>

    public class LinkGroup_Collection : ArrayList
    
{
        
/// <summary>
        
/// adds an item
        
/// </summary>
        
/// <param name="item">an object of Colour class</param>

        public void Add(LinkGroup item)
        
{
            
base.Add(item);
        }

        
//End of Add


        
/// <summary>
        
/// returns data according to given index
        
/// </summary>

        public new LinkGroup this[int nIndex]
        
{
            
get
            
{
                
return (LinkGroup)base[nIndex];
            }

        }

    }

    
//End of class LinkGroup_Collection
}
XPPanel1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NetSharp.WebControl.Explore
{
    [DefaultProperty(
"Text")]
    [ToolboxData(
"<{0}:XPPanel1 runat=server></{0}:XPPanel1>")]
    
public class XPPanel1 : System.Web.UI.WebControls.WebControl
    
{
        
Private properties


        
Public properties


        
Public methods

        
// 重写RenderContents方法
        protected override void RenderContents(HtmlTextWriter output)
        
{
            
// output Style Sheet
            output.Write(@"
<STYLE type='text/css'>
.sec_menu {
    BORDER-RIGHT: white 1px solid; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 5px; OVERFLOW: hidden; BORDER-LEFT: white 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: white 1px solid
}
.menu_title {
    
}
.menu_title SPAN {
    FONT-WEIGHT: bold; LEFT: 8px; COLOR: #333333; POSITION: relative; TOP: 2px
}
.menu_title2 {
    
}
.menu_title2 SPAN {
    FONT-WEIGHT: bold; LEFT: 8px; COLOR: #cc0000; POSITION: relative; TOP: 2px
}
</STYLE>
");
            
// output javascript needed
            output.Write(" <SCRIPT language="javascript"> ");
            output.Write(
"function showsubmenu(sid) {");
            output.Write(
" whichEl = eval("submenu" + sid);");
            output.Write(
" if (whichEl.style.display == "none") { ");
            output.Write(
" eval("submenu" + sid + ".style.display=/"/";"); } ");
            output.Write(
" else { ");
            output.Write(
" eval("submenu" + sid + ".style.display=/"none/";"); } }");
            output.Write(
"</SCRIPT> ");
            
// output all datas
            foreach (LinkGroup _linkGroup in _LinkGroupList)
            
{
                output.Write(
"<!-- Group " + _linkGroup.GroupName + " Start-->");
                output.Write(
@"
    <TABLE cellSpacing=0 cellPadding=0 width='
" + this.Width.ToString() + @"' align='center'>
         <TBODY>
            <!-- Group Title -->
            <TR>
");
                
if(_linkGroup.IsAlwaysExpaned)
                
{
                    
//始终展开
                    output.Write(@"
                <TD class='menu_title' id='menuTitle
" + _linkGroup.GroupID.ToString() + "' background='" + _linkGroup.BackImage + @"' height=" + _linkGroup.TitleHeight.ToString() + @">
                    <SPAN>
" + _linkGroup.GroupName + @"</SPAN> 
                </TD>
");
                }

                
else
                
{
                    output.Write(
@"
                <TD class='menu_title' id='menuTitle
" + _linkGroup.GroupID.ToString() + "' style='CURSOR: hand' onclick=showsubmenu(" + _linkGroup.GroupID.ToString() + ") background='" + _linkGroup.BackImage + "' height=" + _linkGroup.TitleHeight.ToString() + @">
                    <SPAN>
" + _linkGroup.GroupName + @"</SPAN>
                </TD>
");
                }

                
// End of if
                if (_linkGroup.Expanded)
                
{
                    output.Write(
@"
            </TR>
            <!-- Group Title End -->
             <TR>
                <TD id='submenu
" + _linkGroup.GroupID.ToString() + @"'>
                    <DIV class='sec_menu' style='WIDTH: 158px'>
                        <TABLE cellSpacing=0 cellPadding=0 width=130 align=center>
                            <TBODY>
");
                }

                
else
                
{
                    output.Write(
@"
            </TR>
            <!-- Group Title End -->
             <TR>
                <TD id='submenu
" + _linkGroup.GroupID.ToString() + @"' style='DISPLAY: none'>
                    <DIV class='sec_menu' style='WIDTH: 158px'>
                        <TABLE cellSpacing=0 cellPadding=0 width=130 align=center>
                            <TBODY>
");
                }

                
// End of if

                
// 为单个链接生成相应的html代码
                foreach (Link _link in _linkGroup.LinkList)
                
{
                    
if (_link.LinkImage != string.Empty)
                    
{
                        
if (0 == _link.LinkUrl.Length)
                        
{
                            
// 没有链接
                            output.Write(@"
                                <TR>
                                    <TD height=20><IMG height='16' src='
" + _link.LinkImage + "' width='16'>" + _link.Text + "</TD></TR>");
                        }

                        
else
                            output.Write(
@"
                                <TR>
                                    <TD height=20><IMG height='16' src='
" + _link.LinkImage + "' width='16'><A href='" + _link.LinkUrl + "'target='" + _link.Target + "'>" + _link.Text + "</A></TD></TR>");
                        
// End of if
                    }

                    
else
                    
{
                        
if (0 == _link.LinkUrl.Length)
                            
// 没有链接
                            output.Write(@"
                                <TR>
                                    <TD height='20'>
                                        <P style='MARGIN-LEFT: 25px'>
" + _link.Text + "</P></TD></TR>");
                        
else
                            output.Write(
@"
                                <TR>
                                    <TD height='20'>
                                        <P style='MARGIN-LEFT: 25px'><A href='
" + _link.LinkUrl + "'target='" + _link.Target + "'>" + _link.Text + "</A></P></TD></TR>");
                    }

                    
// End of if
                }

                
// End of foreach
                output.Write(@"
                            </TBODY>
                        </TABLE>
                    </DIV>
                    <DIV style='WIDTH: 
" + this.Width.ToString() + @"px'>
                        <TABLE cellSpacing='0' cellPadding='0' width='130' align=center>
                            <TBODY>
                                <TR><TD height=20></TD></TR>
                            </TBODY>
                        </TABLE>
                    </DIV>
                </TD>
            </TR></TBODY></TABLE>
");
            }

            
// End of foreach
        }

        
// End of RenderContents
    }

    
// End of class XPPanel1
}