js树结构--带复选框--C#(递归)

 

在项目中,有一个通讯录组以及通讯录的功能,通讯录组要求无限分级,树状结构显示 ,经过研究,完整地实现了树结构,效果如下还可以实时添加,修改,删除,使用ajax实现,客户端不会刷新

下面先讲怎样在服务端实现这个树结构,首先,数据库设计至少三个字段,主建,名称,父节点(记录父节点主键),由于本项目中树结构较多,所以我用一个实体类来表示TreeEntity.cs

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

namespace  SmsSystem.Model
{
    
public class TreeEntity
    
{
        
public TreeEntity() { }

        
public TreeEntity(int id, string name, int parentId) {
            
this.id = id;
            
this.name = name;
            
this.parentId = parentId;
        }

        
private int id;
        
private string name;
        
private int parentId;

        
public int Id
        
{
            
get return id; }
            
set { id = value ; }
        }


        
public string Name
        
{
            
get return name; }
            
set { name = value ; }
        }


        
public int ParentId 
        
{
            
get return parentId; }
            
set { parentId = value; }
        }


    }

}

 

数据库访问层我在一篇文件中曾经提到过http://blog.csdn.net/cleverfoxloving/archive/2006/09/15/1226956.aspx具体实现不详述了,我用一个类返回一个IList<TreeEntity>(没接触过C#的泛型的这里可能不明白,请参阅相关资料)

/// <summary>
        
/// 获得数据列表返回ArrayList<TreeEntity>
        
/// </summary>

         public  IList < TreeEntity >  GetList( int  companyRkey)
        
{
            IList
<TreeEntity> list = new List<TreeEntity>();
            DataSet ds 
= this.GetDatasetList(" company_Rkey = " + companyRkey);

            
if (ds.Tables[0].Rows.Count > 0)
            
{
                
foreach (DataRow dr in ds.Tables[0].Rows)
                
{
                    TreeEntity tree 
= new TreeEntity();
                    tree.Id 
= int.Parse(dr["Rkey"].ToString());
                    tree.Name 
= dr["Groupname"].ToString();
                    tree.ParentId 
= int.Parse(dr["Parent_rkey"].ToString());

                    list.Add(tree);
                }

            }

            
return list;

        }
接下来要写一个通用的方法,由list递归生成xml,GetTreeXML.cs
using  System;
using  System.Data;
using  System.Collections.Generic;
using  System.Xml;
using  System.IO;

using  SmsSystem.Model;

namespace  SmsSystem.Utility
{
    
public class GetTreeXML
    
{
        
public GetTreeXML() 
        
        }

      
        
public void addDataXml(XmlDocument xmlDoc, XmlElement xmlRootNode, IList<TreeEntity> list)
        

            
foreach(TreeEntity treeEntity in list){
                
if (treeEntity.ParentId == int.Parse(xmlRootNode.GetAttribute("mid")))
                
{
                    XmlElement xmlNewElemene 
= xmlDoc.CreateElement("subject");
                    

                    xmlNewElemene.SetAttribute(
"mid", treeEntity.Id.ToString());
                    xmlNewElemene.SetAttribute(
"name", treeEntity.Name);
                    xmlNewElemene.SetAttribute(
"value", treeEntity.ParentId.ToString());
                    xmlRootNode.AppendChild(xmlNewElemene);
                    addDataXml(xmlDoc, xmlNewElemene, list);
                }

            }

        }


        
public XmlDocument getGroupTree(IList<TreeEntity> list)
        
{
            XmlDocument xmlDoc 
= new XmlDocument();
            XmlDeclaration objXmlDeclare 
= xmlDoc.CreateXmlDeclaration("1.0""UTF-8""yes");
            xmlDoc.InsertBefore(objXmlDeclare, xmlDoc.DocumentElement);
            XmlElement xmlRootElem 
= xmlDoc.CreateElement("subject");
            xmlRootElem.SetAttribute(
"mid""0");
            xmlRootElem.SetAttribute(
"name""通讯录组群");
            xmlDoc.AppendChild(xmlRootElem);
            addDataXml(xmlDoc, xmlRootElem, list);
            
return xmlDoc;

        }


        
public string getGruopTreeStr(IList<TreeEntity> list)
        
{
            
return this.XmlDocumentToString(this.getGroupTree(list));
        }

        
///………………(其它树结构)

        
public string XmlDocumentToString(XmlDocument doc)
        
{
            MemoryStream stream 
= new MemoryStream();
            XmlTextWriter writer 
= new XmlTextWriter(stream, null);
            
//writer.Formatting = Formatting.Indented;
            doc.Save(writer);

            StreamReader sr 
= new StreamReader(stream, System.Text.Encoding.UTF8);
            stream.Position 
= 0;
            
string xmlString = sr.ReadToEnd();
            sr.Close();
            stream.Close();

            
return xmlString;
        }


    }

}

 

这上面的四个方法是主要的核心方法,接下来就是客户端采用Ajax调用,以及有JS生成树结构显示了,只列出部分重要代码,首先简单说一个Ajax调用,采用AjaxPro.dll框架,具体用法参考相关资料,代码如下

  protected   void  Page_Load( object  sender, EventArgs e)
        
{
            AjaxPro.Utility.RegisterTypeForAjax(
typeof(Address_AddressManage));
            
            
        
}

        [AjaxPro.AjaxMethod]
        
public   string  GetAddressGruopStr()  {
            
if (null != Session["userInfo"])
            
{
                
bool isAll = (((SmsSystem.BO.UserInfo)Session["userInfo"]).PopedomType == "1"? true : false;
                
int userRkey = ((SmsSystem.BO.UserInfo)Session["userInfo"]).CustEmployee_Rkey;
                SmsSystem.BLL.AddressGroup addressGroupBll 
= new SmsSystem.BLL.AddressGroup();
                
return addressGroupBll.getGroupTreeStr(userRkey, isAll);
               
            }

            
else
            
{
                Response.Redirect(
"Default.aspx");
                
return null;
            }

       
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值