页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewTree.aspx.cs" Inherits="ClassOnLineSms.NewsManage.NewTree" %> <%@ Register assembly="NineRays.WebControls.FlyTreeView" namespace="NineRays.WebControls" tagprefix="NineRays" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title></title> <mce:script type="text/javascript"><!-- //这里的代码,是此控件操作复选择框的,主要作用是当父结点被选择时,子结点根着对应变化 var ignoreEvents = false; function nodeEventHandler(treeview, node, eventType) { if (ignoreEvents) return; ignoreEvents = true; if (eventType == "checked") { setChildrenCheckBox(node, true); if (allSiblingChecked(node)) { setParentCheckBox(node, true); } } else if (eventType == "unchecked") { setChildrenCheckBox(node, false); setParentCheckBox(node, false); } ignoreEvents = false; } function setChildrenCheckBox(parentNode, value) { var childNodes = parentNode.getChildNodes(); for (var i = 0; i < childNodes.length; i++) { var node = childNodes[i]; node.setChecked(value); setChildrenCheckBox(node, value); } } function setParentCheckBox(node, value) { var parentNode = node.getParent(); if (parentNode == null) return; parentNode.setChecked(value); if (!value || allSiblingChecked(parentNode)) setParentCheckBox(parentNode, value); } function allSiblingChecked(node) { var nodes = node.getSiblingNodes(); for (var i = 0; i < nodes.length; i++) { if (!nodes[i].getChecked()) return false; } return true; } // --></mce:script> </head> <body> <form id="form1" runat="server"> <div> <!-- 这里对于一些方法说明一下 OnNodeEventJavascript 主要是就是关于结点的一些调用 javascript的方法,与上面的代码相对应,我现在主要用的就是它的复选框功能 IsCheckbox (值为true,false)用来表示,树上是否显示复选框 OnPopulateNodes 当我点击结点的时候,它进行的操作,在这里我主要做的就是根据父结点来取得子结点 其它的方法在这时感觉还没有用到 --> <NineRays:FlyTreeView ID="FlyTreeView1" runat="server" BackColor="White" ImageSet="WinXP" OnPopulateNodes="FlyTreeView1_PopulateNodes" BorderColor="Silver" BorderWidth="0px" CssClass="treeMenu" Padding="2px" WideCell="True" IsCheckbox="true" PostBackOnExpand="false" OnNodeEventJavascript="nodeEventHandler" PostBackOnSelect="false" DisplayBar="True" > <DefaultStyle Font-Names="Tahoma" Font-Size="11px" ForeColor="Black" ImageUrl="Images/fff.gif" Padding="1px;3px;3px;1px" RowHeight="16px" /> <SelectedStyle BackColor="65, 86, 122" BorderColor="40, 40, 40" BorderStyle="Solid" BorderWidth="1px" ForeColor="White" Padding="0px;2px;2px;0px" ImageUrl="Images/sss.gif" /> <HoverStyle Font-Underline="True" /> <SelectedHoverStyle BorderStyle="NotSet"></SelectedHoverStyle> </NineRays:FlyTreeView> <mce:script type="text/javascript"><!-- var getTreeContain = document.getElementById("<%=FlyTreeView1.ClientID %>"); getTreeContain.style.overflow = ""; // --></mce:script> </div> <asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="Button" /> </form> </body> </html> 代码 using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ClassOnLineSms.NewsManage { public partial class NewTree : System.Web.UI.Page { //标识字段 public string user_flag = "O"; public int i = 2; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //根节点第一层 string strsql = "select *,len(fun_ID) as fun_Len from menu_fun where len(fun_ID)=" + i + " and fun_Flag='" + user_flag + "' order by fun_ID"; //Response.Write(strsql); //把所得到的值存入DataTable DataTable dt = DataBaseClass.ExecuteDataSetReader(DataBaseClass.DataBaseConn, CommandType.Text, strsql).Tables[0]; foreach (DataRow row in dt.Rows) { AddChild(null, row); } } } //同一表嵌套的使用AddChild方法 private void AddChild(NineRays.WebControls.FlyTreeNode fnode, DataRow row) { NineRays.WebControls.FlyTreeNode node = new NineRays.WebControls.FlyTreeNode(row["fun_ID"].ToString()); //通过fun_Len判断长度,通过fun_ID查fun_name和子节点 int j = int.Parse(System.Convert.ToString(row["fun_Len"]))+2; //Response.Write(j); //int fun_Len = row["fun_Len"] + 2; string strsql = "select *,len(fun_ID) as fun_Len from menu_fun where len(fun_ID)=" + j + " and fun_Flag='" + user_flag + "' and fun_ID like '" + row["fun_ID"] + "%' and fun_ID <> '" + row["fun_ID"] + "' order by fun_ID"; //Response.Write(strsql); DataTable tabChild = DataBaseClass.ExecuteDataSetReader(DataBaseClass.DataBaseConn, CommandType.Text, strsql).Tables[0]; node.Text = row["fun_name"].ToString(); node.Value = row["fun_ID"].ToString(); if (fnode != null) { fnode.ChildNodes.Add(node); } else { this.FlyTreeView1.Nodes.Add(node); } if (tabChild.Rows.Count > 0) { //这个属性是用来显示结点前面是否有+号的 for (int i = 0; i < tabChild.Rows.Count; i++) { node.PopulateNodesOnDemand = true; AddChild(node, tabChild.Rows[i]); } } else { node.PopulateNodesOnDemand = false; } } //当用户点击结点时,触发的事件 protected void FlyTreeView1_PopulateNodes(object sender, NineRays.WebControls.FlyTreeNodeEventArgs e) { //Response.Write("aaaa"+e.Node.Value.ToString()); if (e.Node.ChildNodes.Count <= 0) { string strsql = "select * from menu_fun where fun_Flag='" + user_flag + "' and fun_ID like '" + e.Node.Value.ToString() + "%' and fun_ID <> '" + e.Node.Value.ToString() + "' order by fun_ID"; //Response.Write(strsql); DataTable tabChild = DataBaseClass.ExecuteDataSetReader(DataBaseClass.DataBaseConn, CommandType.Text, strsql).Tables[0]; if (tabChild.Rows.Count > 0) { foreach (DataRow r in tabChild.Rows) { NineRays.WebControls.FlyTreeNode node = new NineRays.WebControls.FlyTreeNode(e.Node.Text); node.Text = r["fun_name"].ToString(); node.Value = r["fun_ID"].ToString(); e.Node.ChildNodes.Add(node); } } } //这里的方法是如果点选了其中的一个父结点,它的子结点也应该被选中 if (e.Node.Checked) { foreach (NineRays.WebControls.FlyTreeNode fn in e.Node.ChildNodes) { fn.Checked = true; } } } protected void Button1_Click(object sender, EventArgs e) { string strTemp = ""; foreach (NineRays.WebControls.FlyTreeNode node in this.FlyTreeView1.Nodes) { //if (node.Checked == true) //{ // strTemp += node.Value.ToString() + "---"; foreach (NineRays.WebControls.FlyTreeNode Cnode in node.ChildNodes) { if (Cnode.Checked == true) { strTemp += Cnode.Value.ToString() + ","; } } //} } Response.Write(strTemp.Substring(0,strTemp.Length-1)); } } }