• 用xml和XmlDataSource构建菜单


     以前做菜单都是取出数据后直接用菜单节点构建菜单,今天发现原来可以换为xml为数据源,做了一个简单的实验了一下,发现比直接建菜单舒服些,写出来看看

    注:其中SystemMenuInfo为实体类,我就不写出来了,

     看来菜单还是依赖XML结构才是正道

     数据表简单结构

    SystemMenuID SystemMenuName ParentID Url
    1 黑龙江省 0 #
    2 哈尔滨市 1 #
    3 五常市 2 #
    4 辽宁省 0 #
    5 大连市 4 #

    public partial class StartPage : System.Web.UI.Page
    {
        SystemMenu sm = new SystemMenu();
        IList<SystemMenuInfo> sms;
        public void RecursionXml(SystemMenuInfo smi, XmlDocument xd, XmlElement xe)
        {
            XmlElement menuItem = xd.CreateElement("menuItem");
            menuItem.SetAttribute("SystemMenuID", smi.SystemMenuID);
            menuItem.SetAttribute("SystemMenuName", smi.SystemMenuName);
            menuItem.SetAttribute("ParentID", smi.ParentID);

            menuItem.SetAttribute("Url", smi.Url);
            xe.AppendChild(menuItem);
            foreach (SystemMenuInfo smiChild in sms)
            {

                if (smiChild.ParentID == smi.SystemMenuID)
                {
                    RecursionXml(smiChild, xd, menuItem);
                }
            }
        }
        public string CreateMenu()
        {
            sms = sm.GetSystemMenus();
            XmlDocument xd = new XmlDocument();
            XmlNode menu = xd.CreateElement("menu");
            xd.AppendChild(menu);

            foreach (SystemMenuInfo smi in sms)
            {
                if (smi.ParentID == "0")
                {
                    RecursionXml(smi, xd, (XmlElement)menu);
                }
            }
            return xd.OuterXml;

        }
        public void BindMenu()
        {

            //XmlSource.DataFile = "*.xml";当然如果你依赖与实际的xml文件也是可以的
            XmlSource.Data = CreateMenu();
            XmlSource.DataBind();
            XmlSource.XPath = "menu/menuItem";
            TreeView1.DataSource = XmlSource;
            TreeView1.DataBind();
            Menu2.DataSource = XmlSource;
            Menu2.DataBind();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            BindMenu();
        }
    }

            <asp:Menu ID="Menu2" runat="server" Orientation="Horizontal" StaticEnableDefaultPopOutImage="false">
                <DataBindings>
                    <asp:MenuItemBinding ValueField="SystemMenuID" TextField="SystemMenuName"  NavigateUrlField="Url" />
                </DataBindings>
            </asp:Menu>
            <asp:XmlDataSource runat="server" ID="XmlSource" />
            <asp:TreeView ID="TreeView1" runat="server">
                <DataBindings>
                    <asp:TreeNodeBinding ValueField="SystemMenuID" TextField="SystemMenuName"  NavigateUrlField="Url" />
                </DataBindings>
            </asp:TreeView>

    然后 你就可以看效果了:)

    public class SystemMenu
    {
        public IList<SystemMenuInfo> GetSystemMenus()
        {
            IList<SystemMenuInfo> ss = new List<SystemMenuInfo>();

            SystemMenuInfo s1 = new SystemMenuInfo();
            s1.SystemMenuID = "1";
            s1.SystemMenuName = "黑龙江省";
            s1.ParentID = "0";
            s1.Url = "#";

            SystemMenuInfo s2 = new SystemMenuInfo();
            s2.SystemMenuID = "2";
            s2.SystemMenuName = "哈尔滨市";
            s2.ParentID = "1";
            s2.Url = "#";

            SystemMenuInfo s3 = new SystemMenuInfo();
            s3.SystemMenuID = "3";
            s3.SystemMenuName = "五常市";
            s3.ParentID = "2";
            s3.Url = "#";

            SystemMenuInfo s4 = new SystemMenuInfo();
            s4.SystemMenuID = "4";
            s4.SystemMenuName = "辽宁省";
            s4.ParentID = "0";
            s4.Url = "#";

            SystemMenuInfo s5 = new SystemMenuInfo();
            s5.SystemMenuID = "5";
            s5.SystemMenuName = "大连市";
            s5.ParentID = "4";
            s5.Url = "#";

            ss.Add(s1);
            ss.Add(s2);
            ss.Add(s3);
            ss.Add(s4);
            ss.Add(s5);
            return ss;
        }
    }

    public class SystemMenuInfo
    {
        public string SystemMenuID;
        public string SystemMenuName;
        public string ParentID;
        public string Url;
    }

  • 相关阅读:
    day10函数名称空间与作用域(3)
    day10函数参数使用(2)
    day10函数基础(1)
    文件处理
    vue打包时semver.js版本报错
    js修改日期
    vue click事件获取当前元素属性
    js截取关键字之后的字符串
    css 清除浮动
    纯CSS绘制三角形
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/1372231.html
Copyright © 2020-2023  润新知