求三层架构的树目录,使用Remoting通信。界面层(UI)只放一颗树,而在业务层的话实现整颗树的加载(数据来自数据库),相当于在界面只调用接口就实现了其功能!

解决方案 »

  1.   

    似乎在 回答过你的帖子。不会 你还没改动代码?TreeView 是不能在 UI 和BAL 之间传递的。当时不是给你说了解决办法吗?
      

  2.   

    还好 找到了 这是你的 第一个帖子发的http://topic.csdn.net/u/20080103/09/cb7d5832-afd2-4dab-a806-69f8c7ebec30.html
    上面已经很好的说明了!不知道是为什么还有这样的帖子!
      

  3.   

    按照上面的去做。构造了一棵树,可是又出现了新的情况:“未将对象引用到对象的实例"
    下面把代码贴出
    1、模型 
    using System;
    using System.Collections.Generic;
    using System.Text;namespace Model
    {
        /// <summary>
        /// 节点
        /// </summary>
        [Serializable]
        public class Node
        {
            private string name;//结点名称
            private string text;//显示的文本
            private string tag;//节点值        public string Name
            {
                set
                {
                    name = value;
                }
                get
                {
                    return name;
                }
            }
            public string Text
            {
                set
                {
                    text = value;
                }
                get
                {
                    return text;
                }
            }        public string Tag
            {
                set
                {
                    tag = value;
                }
                get
                {
                    return tag;
                }
            }
        }
    }2、业务
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using DBUtility;
    using Model;
    using IDAL;namespace AccessDAL
    {
        [Serializable]
        public class TreeView:MarshalByRefObject,IDAL.ItreeView
        {
            public TreeView()
            {
            }        private string strSql;        #region ItreeView 成员
    /// <summary>
    /// 
    /// </summary>
    /// <param name="_node"></param>
    /// <returns></returns>      
            public Node[] GetViewData(Model.Node _node)
            {           
                
                if (_node.Name == "123456")//当树为空时,返回数据--(x,123456)
                {                Node[] _ArrNode = new Node[1];
                    _ArrNode[0].Name = _ArrNode[0].Tag = "123456";
                    _ArrNode[0].Text = "x";
                    return _ArrNode;
                }
                else if (_node.Tag == "123456")//当选择x结点时,返回
                {
                    strSql = "select A.* from D201 as A,[s101-04] as B where A.districtCode=B.id and len(A.orgid)=" + 6 + "";
                    string conn = SqlHelper.connectionString;
                    DataTable dt = SqlHelper.ExecuteTable(conn, CommandType.Text, strSql, null);
                    Node[] _ArrNode = new Node[dt.Rows.Count];
                    if (dt.Rows.Count == 0)
                    {
                       return _ArrNode; 
                    }
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        _ArrNode[i].Name = dt.Rows[i]["A.orgid"].ToString();
                        _ArrNode[i].Text = dt.Rows[i]["A.name"].ToString();
                        _ArrNode[i].Tag = dt.Rows[i]["A.orgid"].ToString();
                    }
                    return _ArrNode;            }
                else//当选择其他结点时,
                {
                    int Len = _node.Tag.Length;
                    strSql = "select * from D201 where len(orgid)=" + Len+2+"and substring(orgid,1,"+Len+")=" + _node.Tag + "";
                    string conn = SqlHelper.connectionString;
                    DataTable dt = SqlHelper.ExecuteTable(conn, CommandType.Text, strSql, null);
                    Node[] _ArrNode = new Node[dt.Rows.Count];
                    if (dt.Rows.Count == 0)
                    {
                        return _ArrNode;
                    }
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        _ArrNode[i].Name = dt.Rows[i]["orgid"].ToString();
                        _ArrNode[i].Text = dt.Rows[i]["name"].ToString();
                        _ArrNode[i].Tag = dt.Rows[i]["orgid"].ToString();
                    }
                    return _ArrNode;
                }
                
            }        #endregion
        }
    }
    3、界面
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace SLxnhClient
    {
        public partial class tree : Form
        {
            public IBLL.ITreeView obj;
            public Model.Node _node = new Model.Node();
            public tree()
            {
                InitializeComponent();
            }        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                _node.Name = treeView1.SelectedNode.Name.ToString();
                _node.Text = treeView1.SelectedNode.Text.ToString();
                _node.Tag = treeView1.SelectedNode.Tag.ToString();            obj = frmLogin.frmlogin.myBllBuild.GreatTreeView();
                for (int i = 0; i < obj.GetViewData(_node).Length; i++)
                {
                    if (treeView1.SelectedNode == null)
                    {
                        MessageBox.Show("请选择一个节点", "提示信息",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        //创建一个节点对象
                        TreeNode tmp;
                        tmp = new TreeNode();
                        tmp.Name = obj.GetViewData(_node)[i].Name;
                        tmp.Text = obj.GetViewData(_node)[i].Text;
                        tmp.Tag = obj.GetViewData(_node)[i].Tag;
                        //在TreeView组件中加入子节点
                        treeView1.SelectedNode.Nodes.Add(tmp);
                    }
                }
            }        private void tree_Load(object sender, EventArgs e)
            {            
                if (treeView1.Nodes.Count == 0)
                {
                    try
                    {
                        obj = frmLogin.frmlogin.myBllBuild.GreatTreeView();
                        _node.Name = "";
                        _node.Tag = "";
                        _node.Text = "";
                        obj.GetViewData(_node);                    
                       
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    }
                }
            }
        }
    }
      

  4.   

     Node[]   _ArrNode   =   new   Node[1]; 
                                    _ArrNode[0].Name   =   _ArrNode[0].Tag   =   "123456"; 
                                    _ArrNode[0].Text   =   "x"; 
                                    return   _ArrNode; 
    错误。改成 Node[]   _ArrNode   =   new   Node[1]; //只是构造了一个Node数组,并没有实际的Node对象。
     Node node=new Node();
                                    node.Name   =  "123456"; 
                                    node.Text   =   "x"; 
                                    _ArrNode[0]= node; 
                                    return   _ArrNode; 请你单步调试;
    还有,你构造的Node 这个类,很难层现出树性结构!
      

  5.   

    本人已经做出来了。是三层结构的,使用remoting通信。