使用无极限treeview

..net2003下使用Treeview+ajax+XML无刷新树

琢磨半天,才搞出来.想想都2008了,我还在用2003,落后啊...
落后是要挨打的.

在此地保存一下.方便日后使用

数据表
CREATE TABLE [dbo].[u_emp_group](
 [group_id] [int] IDENTITY(1,1) NOT NULL,
 [group_name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [group_level] [int] NULL,
 [input_user] [int] NULL,
 [submit_date] [datetime] NULL CONSTRAINT [DF_u_emp_group_submit_date]  DEFAULT (getdate()),
 [deleted] [int] NULL CONSTRAINT [DF_u_emp_group_deleted]  DEFAULT (0),
 [is_admin] [int] NULL CONSTRAINT [DF_u_emp_group_is_admin]  DEFAULT (0),
 CONSTRAINT [PK_u_emp_group] PRIMARY KEY CLUSTERED
(
 [group_id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
--------------------

CREATE TABLE [dbo].[u_emp](
 [user_id] [int] IDENTITY(1,1) NOT NULL,
 [user_name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [user_pwd] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
 [emp_name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [group_id] [int] NULL,
 [emp_tel] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [is_stop] [int] NULL CONSTRAINT [DF_u_emp_is_valid]  DEFAULT (0),
 [input_user] [int] NULL,
 [submit_date] [datetime] NULL CONSTRAINT [DF_u_emp_submit_date]  DEFAULT (getdate()),
 [deleted] [int] NULL CONSTRAINT [DF_u_emp_deleted]  DEFAULT (0),
 [is_admin] [int] NULL CONSTRAINT [DF_u_emp_is_admin]  DEFAULT (0),
 CONSTRAINT [PK_u_emp] PRIMARY KEY CLUSTERED
(
 [user_id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
------------------

CREATE TABLE [dbo].[u_emp_level](
 [level_id] [int] IDENTITY(1,1) NOT NULL,
 [employee_id] [int] NULL,
 [employee_name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [source_table] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [levelNo] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [contact] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
 [insertDate] [datetime] NULL CONSTRAINT [DF_u_emp_level_insertDate]  DEFAULT (getdate()),
 [flag] [int] NULL CONSTRAINT [DF_u_emp_level_flag]  DEFAULT (0),
 CONSTRAINT [PK_u_emp_level] PRIMARY KEY CLUSTERED
(
 [level_id] ASC
) ON [PRIMARY]
) ON [PRIMARY]

GO

---------------

前台页面代码:EmployeeView.aspx

<% @ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls"  %>
<% @ Page language="c#" Codebehind="EmployeeView.aspx.cs" AutoEventWireup="false" Inherits="TestSelf.Sys.employee.EmployeeView"  %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"  >
< HTML >
    
< HEAD >
        
< title > EmployeeView </ title >
        
< meta  content ="Microsoft Visual Studio .NET 7.1"  name ="GENERATOR" >
        
< meta  content ="C#"  name ="CODE_LANGUAGE" >
        
< meta  content ="JavaScript"  name ="vs_defaultClientScript" >
        
< meta  content ="http://schemas.microsoft.com/intellisense/ie5"  name ="vs_targetSchema" >
        
< LINK  href ="../../~Css/Main.css"  type ="text/css"  rel ="stylesheet" >
        
< script  language ="javascript"  src ="employee.js" >
        
</ script >
    
</ HEAD >
    
< body  bottomMargin ="0"  leftMargin ="0"  topMargin ="0"  rightMargin ="0"  MS_POSITIONING ="GridLayout" >
        
< table  cellSpacing ="0"  cellPadding ="0"  width ="100%"  border ="0" >
            
< tr >
                
< td  bgColor ="#999999"  height ="24" >< strong  class ="highlight" >< font  style ="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"  color ="#ffffff" >< u > 组织结构管理 </ u ></ font ></ strong >
                
</ td >
            
</ tr >
        
</ table >
        
< form  id ="Form1"  method ="post"  runat ="server" >
            
< FONT  face ="宋体" ></ FONT >
            
< DIV  style ="DISPLAY: inline; Z-INDEX: 109; LEFT: 32px; WIDTH: 70px; POSITION: absolute; TOP: 44px; HEIGHT: 15px"
                ms_positioning
="FlowLayout" > 组织结构 </ DIV >
            
< iewc:treeview  id ="LevelTreeView"  style ="Z-INDEX: 100; LEFT: 32px; POSITION: absolute; TOP: 64px"
                runat
="server"  name ="LevelTreeView"  Width ="248px"  AutoSelect ="True"  Height ="544px"  ExpandLevel ="2"
                BorderStyle
="Inset"  BackColor ="White"  SystemImagesPath ="/webctrl_client/1_0/treeimages/"  ImageUrl ="./pic/Close.gif"
                ExpandedImageUrl
="./pic/Open.gif" ></ iewc:treeview >< INPUT  id ="RightButton"  style ="Z-INDEX: 101; LEFT: 296px; WIDTH: 48px; POSITION: absolute; TOP: 160px; HEIGHT: 24px"
                onclick
="ToListBox()"  type ="button"  value =">>"  name ="RightButton" >   < INPUT  id ="LeftButton"  style ="Z-INDEX: 102; LEFT: 296px; WIDTH: 48px; POSITION: absolute; TOP: 112px; HEIGHT: 24px"
                onclick
="ToTree()"  type ="button"  value ="<<"  name ="LeftButton" >
            
< DIV  style ="DISPLAY: inline; Z-INDEX: 108; LEFT: 392px; WIDTH: 56px; POSITION: absolute; TOP: 44px; HEIGHT: 15px"
                ms_positioning
="FlowLayout" > 用户列表 </ DIV >
            
< INPUT  id ="groupRadio"  style ="Z-INDEX: 104; LEFT: 368px; POSITION: absolute; TOP: 40px"
                onclick
="ShowUserListbox()"  type ="radio"  CHECKED name ="listRadio" >
            
< DIV  style ="DISPLAY: inline; Z-INDEX: 105; LEFT: 512px; WIDTH: 56px; POSITION: absolute; TOP: 44px; HEIGHT: 15px"
                ms_positioning
="FlowLayout" > 岗位列表 </ DIV >
            
< INPUT  id ="userRadio"  style ="Z-INDEX: 103; LEFT: 488px; POSITION: absolute; TOP: 40px"
                onclick
="ShowGroupListbox()"  type ="radio"  name ="listRadio" >
            
< SELECT  id ="userSelect"  style ="Z-INDEX: 107; LEFT: 360px; VISIBILITY: visible; WIDTH: 248px; POSITION: absolute; TOP: 64px; HEIGHT: 544px"
                size
="34"  name ="userSelect"  runat ="server" >
                
< OPTION ></ OPTION >
            
</ SELECT >
            
< SELECT  id ="groupSelect"  style ="Z-INDEX: 110; LEFT: 624px; VISIBILITY: hidden; WIDTH: 248px; POSITION: absolute; TOP: 64px; HEIGHT: 544px"
                size
="22"  name ="groupSelect"  runat ="server" >
                
< OPTION ></ OPTION >
            
</ SELECT >
        
</ form >
    
</ body >
</ HTML >

后台代码:EmployeeView.aspx.cs

using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Web;
using  System.Web.SessionState;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;
using  Microsoft.Web.UI.WebControls;
using  System.Xml;


using  TestSelf..Sys.Classemployee;
using  TestSelf..Sys.employee.BuildXML;

namespace  TestSelf..Sys.employee
{
    
/// <summary>
    
/// EmployeeView 的摘要说明。
    
/// </summary>

    public class EmployeeView : System.Web.UI.Page
    
{
        
protected Microsoft.Web.UI.WebControls.TreeView LevelTreeView;
        
protected System.Web.UI.HtmlControls.HtmlSelect userSelect;
        
protected System.Web.UI.HtmlControls.HtmlSelect groupSelect;

        
private EmployeeClass Emp ; //Employee类

        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面

            AjaxPro.Utility.RegisterTypeForAjax(
typeof(EmployeeView)); 

            InitData();
            FullInUserList();
            FullInGroupList();

            RunXML();
        }


        
Web 窗体设计器生成的代码
        



        
/// <summary>
        
/// 初始化
        
/// </summary>

        private void InitData()
        
{
            Emp 
= new EmployeeClass();
            Emp.server_name 
= Session["server_name"].ToString();
            Emp.server_username 
= Session["server_username"].ToString();
            Emp.server_password 
= Session["server_password"].ToString();
            Emp.database_name 
= Session ["database_name"].ToString();
            Emp.InitData();
            
        }


        
private void FullInUserList()
        
{  
            DataTable dsUserList 
= new DataTable();
            dsUserList 
= Emp.GetUsers();
            
int count = dsUserList.Rows.Count;
            ListItem[] items 
= new ListItem[count];
            
for (int i = 0 ; i < count ; i++)
            
{
                items[i] 
= new ListItem(dsUserList.Rows[i]["emp_name"].ToString(),dsUserList.Rows[i]["user_id"].ToString());
                
            }

            userSelect.Items.AddRange(items);
            


        }


        
private void FullInGroupList()
        
{  
            DataTable dsGroupList 
= new DataTable();
            dsGroupList 
= Emp.GetGroup();
            
int count = dsGroupList.Rows.Count;
            ListItem[] items 
= new ListItem[count];
            
for (int i = 0 ; i < count ; i++)
            
{
                items[i] 
= new ListItem(dsGroupList.Rows[i]["group_name"].ToString(),dsGroupList.Rows[i]["group_id"].ToString());
                
            }

            groupSelect.Items.AddRange(items);
            
        }


        
private void RunXML()
        
{
            DataTable dsTree 
= new DataTable();
            dsTree 
= Emp.GetTreeData();

            Hashtable ht 
= new Hashtable() ;
            ht.Add(
"Text","employee_name");
            ht.Add(
"NodeData","LevelNo");
            ht.Add(
"Target","source_table");                
            ht.Add(
"ID","employee_id");

            BuildTreeXML BTreeXML 
= new BuildTreeXML();
            
string FieldName = BTreeXML.CreateXML(dsTree,ht);

            LevelTreeView.Nodes.Clear() ;
            LevelTreeView.TreeNodeSrc 
=FieldName;
            LevelTreeView.DataBind();
        }



    
    

        
AjaxPro方法 


  
    

    }

}


自定义类Employee.cs

using  System;
using  System.Data;
using  System.Collections;

using  TestSelf..PM;

namespace  TestSelf..Sys.Classemployee
{
    
/// <summary>
    
/// EmployeeClass 的摘要说明。
    
/// </summary>

    public class EmployeeClass
    
{

        
私有成员 私有成员


        
属性 属性

        
方法 方法


    }

}

 

javascript代码 Employee.js

function  ToTree()
{// levelNO为四位一组的字符串 如 0001 第一位是区分此节点为"组(0)"或"用户(1)" 后三位是相应的ID号
  var ControlList = document.getElementById("userSelect");
  
if (ControlList.style.visibility == "hidden" )
  
{
     ControlList 
= document.getElementById("groupSelect");
     
var SelectType = "0";  // 成员的类型为 0 组
  }

  
else
  
{
     ControlList 
= document.getElementById("userSelect");
     
var SelectType = "1";  // 成员的类型为 1 用户
  }

  
  
var SelectNum = ControlList.selectedIndex;
  
if (( SelectNum == -1 )||( SelectNum == 0 ))
  
{
     
return false 
  }

  
var SelectText = ControlList.options[SelectNum].text ;
  
var SelectValue = ControlList.options[SelectNum].value ; 
  
 
//  alert(SelectNum+";"+SelectText+";"+SelectValue)
   ControlList.remove(SelectNum);
   
   DataToTree(SelectText,SelectValue,SelectType)
}


function  DataToTree(SelectText,SelectValue,SelectType)
{
  
var ControlTree = document.getElementById("LevelTreeView");
  
var TreeNodeSelectNum = ControlTree.selectedNodeIndex ; 
  
if ( TreeNodeSelectNum == -1 ) 
  
{
     
return false 
  }
  
  
  
var TreeNodeData = FormatValue(SelectType,SelectValue);  
  
var SelectNode = ControlTree.getTreeNode( TreeNodeSelectNum ) ;//得到被选节点对象
  var SelectNodeData = SelectNode.getAttribute("NodeData");   //得到被选节点NODEDATA属性
  var node=ControlTree.createTreeNode();
  
var CurrentTreeNodeData = SelectNodeData + TreeNodeData ;
  
//设置节点属性 
  node.setAttribute("Text",SelectText);            //成员名称
  node.setAttribute("ID","R"+SelectType+"T"+SelectValue);   //成员ID 形式如 : R0T1 ; ID不可以数字开头. 
  node.setAttribute("Target",SelectType);        //成员类型 组  用户
  node.setAttribute("NodeData",CurrentTreeNodeData);    //将节点标识符存入ID中.用它可以找到其父节点
  node.setAttribute("Expanded","True");
  SelectNode.add(node);  
//增加子节点
  //ajaxpro插入数据库  InsertTreeDataToDB(string TableType,string curNodeValue,string curNodeText,string curlevelNo)
  C21_MMC.Sys.employee.EmployeeView.InsertTreeDataToDB(SelectType,SelectValue,SelectText,CurrentTreeNodeData);
}


function  FormatValue(Type,Value)   // 将成员ID 格式化四位数据包 例如为 "1001","1011","1111"

  
if ( Value.length == 1 ) 
  
{
    
return Type+"00"+Value ;
  }

  
  
if ( Value.length == 2 ) 
  
{
    
return Type+"0"+Value ;
  }

  
  
if ( Value.length == 3 ) 
  
{
    
return Type+Value ;
  }

 }

 
 
function  ToListBox()
 
{
   
var ControlTree = document.getElementById("LevelTreeView");
   
var TreeNodeSelectNum = ControlTree.selectedNodeIndex ; 
   
var SelectNode = ControlTree.getTreeNode( TreeNodeSelectNum ) ;//得到被选节点对象
   var SelectNodeID = SelectNode.getAttribute("ID").split('T')[1];   //得到被选节点ID ; 
   var SelectNodeText = SelectNode.getAttribute("Text");   //得到被选节点Text ;
   var SelectNodeType = SelectNode.getAttribute("Target");   //得到被选节点类型 用户or组 ;
   var ChildrenNod = SelectNode.getChildren() ;
   
if ( ChildrenNod.length == 0 )
   
{
         
//ajaxpro删除  public void DeleteTreeDataFromDB(string Employee_idStr,string SourceTableStr)
        C21_MMC.Sys.employee.EmployeeView.DeleteTreeDataFromDB(SelectNodeID,SelectNodeType) ;  
       SelectNode.remove() ;
       AddListData(SelectNodeText,SelectNodeID,SelectNodeType);
      

   }

   
else
   
{
      alert(
"无法移动!请先移动子节点");     
   }


 }

 
 
function  AddListData(listText,listValue,SelectType)
 
{
    
if ( SelectType == 1 )
    
{
       ListTypeStr 
= "userSelect" ;
    }

    
if ( SelectType == 0 )
    
{
       ListTypeStr 
= "groupSelect" ;
    }

    
    
var ControlList = document.getElementById(ListTypeStr);
    
if (( ControlList.style.visibility == "hidden" )&&( SelectType == 0 ))
    
{
      alert(
"无法将岗位移动到用户组中")
      
return false;
    }

     
if (( ControlList.style.visibility == "hidden" )&&( SelectType == 1 ))
    
{
      alert(
"无法将用户移动到岗位组中")
      
return false;
    }

    
var Opt = document.createElement("option");
    Opt.text 
= listText;
    Opt.value 
= listValue ;
    ControlList.options.add(Opt)
    
//将从Treeview中移动的项目 调整到listbox的首位 
    var OptionLength = ControlList.options.length ;
    
var textStr = ControlList.options[OptionLength-1].text ;
    
var valueStr = ControlList.options[OptionLength-1].value ;
    
    ControlList.options[
1].text = textStr ;
    ControlList.options[
1].value = valueStr  ;
  
 }

 
 
function  ShowUserListbox()
 
{
    
var ControlListUser = document.getElementById("userSelect");
    
var ControlListGroup = document.getElementById("groupSelect");
    
if (ControlListUser.style.visibility == "hidden" )
    
{

      ControlListUser.style.visibility 
="visible"   ;
      ControlListGroup.style.visibility 
= "hidden" ;
    }


 }

 
 
function  ShowGroupListbox()
 
{
    
var ControlListUser = document.getElementById("userSelect");
    
var ControlListGroup = document.getElementById("groupSelect");
    
if (ControlListGroup.style.visibility == "hidden")
    
{
      ControlListUser.style.visibility 
="hidden"   ;
      ControlListGroup.style.visibility 
= "visible" ;
      
if ( ControlListGroup.style.left != ControlListUser.style.left )
      
{
         ControlListGroup.style.left 
= ControlListUser.style.left ;
      }

    }


 }

 

 
 
 
 
 
 
 


 数据库连接类部分代码  ProjectManageClass.cs

using  System;
using  System.Data;
using  System.Data.OleDb;
using  System.Xml;
using  System.IO;
using  System.Text;

namespace  TestSelf..PM
{
    
/// <summary>
    
/// Class1 的摘要说明。
    
/// </summary>
    
/// 

    public interface IProjectManage
    
{
        DataSet GetDateValue(
string sSQL);

        
int ExecuteData(string sqlstr);//无返回值的SQL语句


    }

    
public class ProjectManage :IProjectManage 
    
{
        
private OleDbConnection Cnn;
        
private DataSet DS;
        
//private static string sConnstring;
        private string sDataBase,sUserId,sServer,sPassWord;
        
/*public ProjectManage()
        {
            sConnstring=GetsCnnString();
            Cnn=new OleDbConnection(sConnstring);
               
        }
*/

        
public ProjectManage(string server_name,string server_username,string server_password,string database_name)
        
{
            
string scnn="Provider=SQLOLEDB.1;Persist Security Info=True;Connect Timeout=240;User ID="+server_username+";"            
                
+"Initial Catalog="+database_name+";Data Source="+server_name+";Password="+server_password;
            Cnn
=new OleDbConnection(scnn);
            
        }

        
        
/// <summary>
        
/// 设置获得连接字符串
        
/// </summary>

        /*        public static string ConString
                {
                    get 
                    {
                        return sConnstring;
                    }
                    set
                    {
                        sConnstring=value;
                    }
                }
*/



        
public int ExecuteData(string sqlstr)//无返回值的SQL语句
        {
            Cnn.Open();
            OleDbCommand cmd
=new OleDbCommand(sqlstr,Cnn);
            
try
            
{
                
return  cmd.ExecuteNonQuery();
                

            }

            
catch(Exception e)
            
{

                
throw e;
            }

            
finally
            
{
                Cnn.Close();
                
            }


        }




        
public DataSet GetDateValue(string sSQL)
        
{
            
try
            
{                
                Cnn.Open();
                OleDbDataAdapter DA
=new OleDbDataAdapter(sSQL,Cnn);                
                DS
=new DataSet();
                DA.Fill(DS);
            }

            
catch(Exception e)
            
{
                DS
=null;
                
throw e;
            }

            
finally
            
{
                Cnn.Close();
            }

            
return DS;
        }


    


    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值