按照上面的去做。构造了一棵树,可是又出现了新的情况:“未将对象引用到对象的实例" 下面把代码贴出 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);
上面已经很好的说明了!不知道是为什么还有这样的帖子!
下面把代码贴出
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);
}
}
}
}
}
_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 这个类,很难层现出树性结构!