需要添加fatherID字段,才能实现
解决方案 »
- panel动态加载窗口问题
- c# 连接sql2005 超时问题
- 我在pictureBox1写字后,如何保存为图片?
- System.Diagnostics.Process.Start 接收参数
- 字符串集合排序的问题
- 关于ADSI建虚拟目录的一些疑问,高手请进,高分想送您!只写Up的同志不要参与!
- 刚开始学习webservice一个小时,入门级的webservice问题,msdn的示例程序,谁能帮我看看问题在哪里?
- C# 在control上添加窗口,不显示
- 如何修改窗体中的按钮属性?
- c#如何做一个界面,将一个数据库表中的数据追加在另外一个数据库的表里!谢谢
- 我对ListView自行排序,需要new ListViewSort,有谁知道需要什么namespace 或者type
- 画图操作中,如何在点击滚动条时不让图闪动呢
表 A有字段Id 和 DETAIL
表 B有字段parentId childId sequence(在父ID下的次序)
B表示的就是父ID和子ID的关系
爷爷ID是0
读取0以下的ID(就是从表B读取parentId为0的项 然后按sequence排序显示)
依次递归下去 OK
我的BLOG
TreeView递归算法
http://blog.csdn.net/fei0504
上面写的有,记得给分啊
你的只是一部分代码,因为我是初学者,能给我一个包含全部代码的实例吗?
非常感谢
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;public partial class Default9 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddTreeView(-1, (TreeNode)null);
} }
protected void AddTreeView(Int64 ID, TreeNode tn)
{
//string objConn = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString().Trim());
String strCmd = "select MaterialName,RowID from MaterialCodeDef where PRowID=" + ID; SqlCommand objCmd = new SqlCommand(); objCmd.Connection = objConn;
objConn.Open();
objCmd.CommandText = strCmd; SqlDataReader objDR = objCmd.ExecuteReader(); while (objDR.Read())
{
if (tn == null)
{
TreeNode myNode = new TreeNode();
myNode.Text = objDR["MaterialName"].ToString().Trim();
myNode.Value = objDR["RowID"].ToString().Trim();
TreeView1.Nodes.Add(myNode);
AddTreeView(Int64.Parse(objDR["RowID"].ToString().Trim()), (TreeNode)myNode);
}
else
{
TreeNode myNode1 = new TreeNode();
myNode1.Text = objDR["MaterialName"].ToString().Trim();
myNode1.Value = objDR["RowID"].ToString().Trim();
tn.ChildNodes.Add(myNode1);
AddTreeView(Int64.Parse(objDR["RowID"].ToString().Trim()), (TreeNode)myNode1);
}
} objDR.Close();
objConn.Close();
}}web.config数据库连接如下:<configuration>
<appSettings>
<add key="ConnectionString" value="server=(local);database=sxl;User Id=sa; Password=;" />
</appSettings>
<system.web>-----------------------------------------------------------
运行到:SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString().Trim());
提示:未将对象引用设置到对象的实例。表MaterialCodeDef:
1 PROWID char 3 1
0 ROWID nvarchar 1050 1
0 MaterialName varchar 50 1
{
OleDbCommand command = new OleDbCommand("SELECT DETAIL, [NAME] FROM TABLE1 ORDER BY DETAIL,[NAME]", conn);
OleDbDataReader dr = command.ExecuteReader();
//TreeView1.BeginUpdate();
TreeView1.Nodes.Clear();
TreeNode parent = null;
TreeNode child = null;
string detail = "";
TreeNode Grandparent = new TreeNode("公司");
TreeView1.Nodes.Add(Grandparent);
while (dr.Read())
{ if (detail != dr.GetString(0))
{
parent = new TreeNode(dr.GetString(0));
Grandparent.ChildNodes.Add(parent);
detail = dr.GetString(0);
}
child = new TreeNode(dr.GetString(1));
parent.ChildNodes.Add(child);
}
//TreeView1.EndUpdate();
dr.Close();
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.OleDb;
public partial class Default10 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
string CustomerDataConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection conn = new SqlConnection(CustomerDataConnectionString);
OleDbCommand command = new OleDbCommand("SELECT DETAIL, [NAME] FROM AAAA ORDER BY DETAIL,[NAME]", conn);
OleDbDataReader dr = command.ExecuteReader();
//TreeView1.BeginUpdate();
TreeView1.Nodes.Clear();
TreeNode parent = null;
TreeNode child = null;
string detail = "";
TreeNode Grandparent = new TreeNode("公司");
TreeView1.Nodes.Add(Grandparent);
while (dr.Read())
{ if (detail != dr.GetString(0))
{
parent = new TreeNode(dr.GetString(0));
Grandparent.ChildNodes.Add(parent);
detail = dr.GetString(0);
}
child = new TreeNode(dr.GetString(1));
parent.ChildNodes.Add(child);
}
//TreeView1.EndUpdate();
dr.Close();
}
}
提示:
错误 4 与“System.Data.OleDb.OleDbCommand.OleDbCommand(string, System.Data.OleDb.OleDbConnection)”最匹配的重载方法具有一些无效参数 D:\公司网站\Default10.aspx.cs 29 36 D:\公司网站\
错误 5 参数“2”: 无法从“System.Data.SqlClient.SqlConnection”转换为“System.Data.OleDb.OleDbConnection” D:\公司网站\Default10.aspx.cs 29 111 D:\公司网站\
循环第一张表,添加节点,每添加一个节点,检查第二张表有没有和它相符的记录(人员),有就循环添加人员(用查找表 Select() 得出 DataRow 数组,然后 Foreach 这个数组);
OK!
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;namespace blueMIS.Class
{
/// <summary>
/// 提供一个公共的 TreeNode 生成方法,使用三个 DataSet 创建一个 TreeNode,支持三层逻辑属性(不是指只有三层结点)
/// DataSet 的结构必须为 node_text, node_name, node_parents, [node_tag]....
/// </summary>
public class clsTreeNodeCreator
{
/// <summary>
/// dsBaseStructure:用于创建 Tree 的主结构,主结构可以为多级:如公司所有部门及下级单位、材料的多级分类
/// ds1, ds2:用于创建与主结构挂接的下级属性,其中 ds2 为 ds1 的下一级属性:如公司所有部门单位所属的人员,以及每个人员所负责的工作项目
/// </summary>
private DataSet dsBaseStructure, dsF1, dsF2;
private TreeNode rootNode; public clsTreeNodeCreator(TreeNode node, DataSet ds, DataSet ds1, DataSet ds2)
{
rootNode = node;
dsBaseStructure = ds;
dsF1 = ds1;
dsF2 = ds2;
}
public clsTreeNodeCreator(TreeNode node, DataSet ds, DataSet ds1)
{
rootNode = node;
dsBaseStructure = ds;
dsF1 = ds1;
dsF2 = null;
}
public clsTreeNodeCreator(TreeNode node, DataSet ds)
{
rootNode = node;
dsBaseStructure = ds;
dsF1 = null;
dsF2 = null;
} public TreeNode getTreeNode(string rootNodeSelectExpress)
{
if (dsBaseStructure != null)
{
DataRow[] dRows = dsBaseStructure.Tables[0].Select(rootNodeSelectExpress);
if (dRows.Length > 0)
getModProChild(dRows, rootNode, 1, true, false);
}
return rootNode;
} /// <summary>
/// 获取模块下子节点
/// </summary>
/// <param name="dRows">用来添加本层结构的 DataRow</param>
/// <param name="node">被添加的节点</param>
/// <param name="imgIndex">本层结点的 ImageIndex</param>
/// <param name="baseF">当前节点是否属于主结构,只允许基本结构嵌套,第二层属性不允许挂在主结构下</param>
/// <param name="F1">当前节点是否属于第一层属性,第二层属性只能挂在第一层属性下</param>
private void getModProChild(DataRow[] dRows, TreeNode node, int imgIndex, bool baseF, bool F1)
{
TreeNode childNode;
DataRow[] dRows0, dRows1, dRows2;
foreach (DataRow dr in dRows)
{
childNode = new TreeNode();
childNode.Text = dr.ItemArray[0].ToString();
childNode.Name = dr.ItemArray[1].ToString();
if (dr.ItemArray.Length > 3)
childNode.Tag = dr.ItemArray[3].ToString();
childNode.ImageIndex = imgIndex;
childNode.SelectedImageIndex = imgIndex; // 主结构的递归
if (baseF)
{
dRows0 = dsBaseStructure.Tables[0].Select("node_parents = '" + childNode.Name + "'");
if (dRows0.Length > 0)
getModProChild(dRows0, childNode, 1, true, false);
} // 向主结构添加第一层属性
if (dsF1 != null && baseF)
{
dRows1 = dsF1.Tables[0].Select("node_parents = '" + childNode.Name + "'");
if (dRows1.Length > 0)
getModProChild(dRows1, childNode, 2, false, true);
} // 向第一层属性添加第二层属性
if (dsF2 != null && F1)
{
dRows2 = dsF2.Tables[0].Select("node_parents = '" + childNode.Name + "'");
if (dRows2.Length > 0)
getModProChild(dRows2, childNode, 3, false, false);
} node.Nodes.Add(childNode);
}
}
}
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;public partial class Default9 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddTreeView(1, (TreeNode)null);
} }
protected void AddTreeView(Int64 ID, TreeNode tn)
{
string CustomerDataConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection objConn = new SqlConnection(CustomerDataConnectionString); String strCmd = "select DETAIL,NAME from AAAA where ID=" + ID; SqlCommand objCmd = new SqlCommand(); objCmd.Connection = objConn;
objConn.Open();
objCmd.CommandText = strCmd; SqlDataReader objDR = objCmd.ExecuteReader(); while (objDR.Read())
{
if (tn == null)
{
TreeNode myNode = new TreeNode();
myNode.Text = objDR["DETAIL"].ToString().Trim();
myNode.Value = objDR["NAME"].ToString().Trim();
TreeView1.Nodes.Add(myNode);
AddTreeView(Int64.Parse(objDR["DETAIL"].ToString().Trim()), (TreeNode)myNode);
}
else
{
TreeNode myNode1 = new TreeNode();
myNode1.Text = objDR["DETAIL"].ToString().Trim();
myNode1.Value = objDR["NAME"].ToString().Trim();
tn.ChildNodes.Add(myNode1);
AddTreeView(Int64.Parse(objDR["DETAIL"].ToString().Trim()), (TreeNode)myNode1);
}
} objDR.Close();
objConn.Close();
}
}