107 lines
3.1 KiB
C#
Raw Permalink Normal View History

2017-09-05 11:30:31 +08:00
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Text;
using System.Xml;
using System.IO;
using System.Reflection;
namespace FineUI.Examples.toolbar
{
public partial class menu_dynamic : PageBase
{
protected void Page_Init(object sender, EventArgs e)
{
LoadToolbar();
}
protected void Page_Load(object sender, EventArgs e)
{
}
private void LoadToolbar()
{
XmlDocument doc = LoadXml();
// 根节点的子节点们
XmlNodeList nodes = doc.DocumentElement.ChildNodes;
foreach (XmlNode node in nodes)
{
FineUI.Button btn = new Button();
btn.Text = node.Attributes["text"].Value;
btn.EnablePostBack = false;
Toolbar1.Items.Add(btn);
// 如果此节点没有子节点
if (node.ChildNodes.Count == 0)
{
XmlAttribute attrURL = node.Attributes["navigateurl"];
if (attrURL != null)
{
btn.OnClientClick = String.Format("window.open('{0}','_blank')", attrURL.Value);
}
}
else
{
ResolveMenu(btn, node.ChildNodes);
}
}
}
private XmlDocument LoadXml()
{
// 加载XML配置文件
string xmlPath = Server.MapPath("~/toolbar/menu.xml");
string xmlContent = String.Empty;
using (StreamReader sr = new StreamReader(xmlPath))
{
xmlContent = sr.ReadToEnd();
}
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlContent);
return doc;
}
private void ResolveMenu(ControlBase btn, XmlNodeList nodes)
{
//FineUI.Menu menu = new Menu();
//// 通过反射获取属性Menus
//PropertyInfo info = btn.GetType().GetProperty("Menus");
//(info.GetValue(btn, null) as MenuCollection).Add(menu);
PropertyInfo menuInfo = btn.GetType().GetProperty("Menu");
Menu menu = menuInfo.GetValue(btn, null) as Menu;
foreach (XmlNode node in nodes)
{
XmlAttribute attrURL = node.Attributes["navigateurl"];
if (attrURL != null)
{
FineUI.MenuHyperLink lnk = new FineUI.MenuHyperLink();
lnk.Text = node.Attributes["text"].Value;
lnk.NavigateUrl = attrURL.Value;
lnk.Target = "_blank";
menu.Items.Add(lnk);
if (node.ChildNodes.Count > 0)
{
ResolveMenu(lnk, node.ChildNodes);
}
}
}
}
}
}