今天要做个树的效果,以前网上看到过人家用ExtJS做出来的树挺不错的,所以也就小试一翻。

另外什么都没看就看了个树,Google了一下 而已,所以对ExtJS是相当的初级初级

 

javaScript:代码

 Ext.onReady(function() {

            // 调用 Web Service
            TreeService.GetTree(onSuccessed);

            function onSuccessed(result) {
                // result 为 Web Service 方法 GetTree 的 JSON 形式返回值
               
                var asyncTreeNode=new Ext.tree.AsyncTreeNode({//异步加载节点
                        id: "root",
                        text: "南垟村结构",
                        expanded: true,
                        leaf: false,
                        children: result    // 将从 Web Service 取到的所有节点绑定到根节点下。
                    });
                var tree = new Ext.tree.TreePanel({//就是用来呈现树的"控件"吧
                    el: "divTree",//在page中用来渲染的标签(容器)
                    animate: true,//是否动画
                    title: "TreePanel",//标题
                    collapsible: true,
                    enableDD: true,// 是否支持拖拽效果
                    enableDrag: true,
                    rootVisible: true,
                    autoScroll: true,//是否支持滚动
                    height:527,
                    singleExpand: true,//同时只能打开一个树,当打开其中任何一个树时,将会关闭其他已经打开的树目录  
                    width: 200,
                    lines: true,
                    useArrows: true,//树形目录使用visit中树目录显示效果(三角形代替+号)  
                    root: asyncTreeNode//树目录数据加载  此处用了异步    

//   loader: new Ext.tree.TreeLoader({      //两种方法都行

 //           dataUrl:'tree-data.json'//树目录数据加载为本地json数据文件     有些是页面或java中的action ,单最终目的还是要response 一个Json文件或文件流

    //它还有很多属性  例如:

                  //rootVisible : true,是否隐藏根节点 

               //region:'north'//北边   

              //split: true//可以调节大小    

  //  }),   

节点一般也有不少属性

                             id--也就是documnet.getElement这个ID 

                              text--显示的值

                              leaf--false  or  true  //是否是叶节点

                              href--链接

                             hrefTarget--链接方式 例如_blank

                             icon--图标

                             cla--style class

                 


                });
                tree.render();  //这句一定要写 要不然不会显示
            }

        });

 

<div id='divTree'></div>

 

这样就能实现数的体现,节点数据我是通过WebService中调用的方法返回到javascript中,为什么直接可以这样使用呢,

因为这节点的数据一般都是Json文件或Json文件流,因为WebServie返回到javascript中本来就是以Json的形式存储的

后台代码:

 

public class TreeNode
    {
        // 摘要:
        //     Initializes a new instance of the TreeNode class.
        public TreeNode()
        {
        }

        private string _id;
        public string id
        {
            get { return _id; }
            set { _id = value; }
        }

        private string _text;
        public string text
        {
            get { return _text; }
            set { _text = value; }
        }

        private bool _leaf;
        public bool leaf
        {
            get { return _leaf; }
            set { _leaf = value; }
        }

        private List<TreeNode> _children=new List<TreeNode>();


        public List<TreeNode> children
        {
            get { return _children; }
            set { _children = value; }
        }

        private string _href;
        public string href
        {
            get { return _href; }
            set { _href = value; }
        }

        private string _hrefTarget;
        public string hrefTarget
        {
            get { return _hrefTarget; }
            set { _hrefTarget = value; }
        }
    }

--WebService

 

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class TreeService : System.Web.Services.WebService {

    public TreeService () {

        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }

    [WebMethod]
    public  List<TreeNode>GetTree() {

        List<TreeNode> nodes = new List<TreeNode>();
        DataTable dt = GetDT("proc_getTeam");
        foreach(DataRow row in dt.Rows)
        {
            TreeNode node = new TreeNode();
            node.id = row["team"].ToString().Trim();
            node.text = row["team"].ToString().Trim();
            //node.href = "http://www.google.cn/";
            DataTable dtH = GetDT("proc_getFamilyByTeam" , row["team"].ToString());
            if (dtH.Rows.Count > 0)
            {
                foreach (DataRow rowHu in dtH.Rows)
                {
                    TreeNode nH = new TreeNode();
                    nH.id = rowHu["id"].ToString().Trim();
                    nH.text = rowHu["fa"].ToString().Trim();
                    nH.leaf = true;
                    node.children.Add(nH);

                }
            }
            else
                node.leaf = true;
            nodes.Add(node);
        }
        return nodes;

    }

 


    public DataTable GetDT(string procName,params string[] arg)
    {
        DataSet myDataSet = new DataSet();
        string connectionString = ConfigurationManager.ConnectionStrings["YQKCConn"].ConnectionString;
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            string proc = "exec " + procName;
            if (arg.Length > 0)
            {
                proc += " " + arg[0];
            }

            SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(proc, connection);
          
            mySqlDataAdapter.Fill(myDataSet);
        }

        if (myDataSet.Tables.Count > 0)
            return myDataSet.Tables[0];
        return new DataTable();
    }

}

 

这ExtJS用json数据就够还比较多的  暂且我是这样了解的 一般的json数据结构

[{id:"zhang",text:"wang"},{id:"wang",text:"li"}]--id、text 这些都不是写死的 只是ExtJS识别这些 所以才用这

哈哈  今天一天收获不小 ,要学的路还很长啊

posted on 2009-05-13 21:59  冷傲残痕  阅读(3109)  评论(0编辑  收藏  举报