28 个解决方案
#1
顶!
#2
顶!
#3
把表结构贴出来看看
#4
这个方法太多了,还是贴你的程序我们来抓错吧。
#5
名称 节点号
中国 01
城市a 0101
a市1中心 010101
1中心A区 01010101
1中心B区 01010102
a市2中心 010102
a市3中心 010103
3中心A区 01010301
城市b 0102
法国 02
城市a 0201
a市1中心 020101
a市2中心 020102
中国 01
城市a 0101
a市1中心 010101
1中心A区 01010101
1中心B区 01010102
a市2中心 010102
a市3中心 010103
3中心A区 01010301
城市b 0102
法国 02
城市a 0201
a市1中心 020101
a市2中心 020102
#6
/// BranchList 的摘要说明。
/// </summary>
public class BranchList : PageBaseIContentCn
{
protected Microsoft.Web.UI.WebControls.TreeView tvBranchList;
protected System.Web.UI.HtmlControls.HtmlGenericControl dvTree;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.InitBase();
if(!IsPostBack)
{
this.FillTreeView();
}
}
private void FillTreeView()
{
OrgChart OC = new OrgChart(ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetGroups = OrgChart.get_NodeBySystem(this.UserLoginCur.IdEmployee.Trim(),"IContent",ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetTarget = "frPickBuilding";
OC.Image_Url = "../images/admin.gif";
OC.Emp_Url = "PreviewPickBuilding.aspx";
OC.Group_Url = "PreviewPickBuilding.aspx";
foreach(Microsoft.Web.UI.WebControls.TreeNode Node in OC.BuildTreeNodes())
{
this.tvBranchList.Nodes.Add(Node);
//Node.Expanded = true;
}
//递归算法展开所有的子节点
foreach(Microsoft.Web.UI.WebControls.TreeNode node in this.tvBranchList.Nodes)
{
node.Expanded = true;
if(node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
node.NavigateUrl = node.NavigateUrl.Substring(0,node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
node.NavigateUrl = node.NavigateUrl.Trim()+",";
}
//去掉图片
node.ImageUrl="";
this.ExpandNode(node);
//反向递归出子节点
string Path = "";
this.GetChildrenQueryString(node,ref Path);
//更正路径
this.CorrectPath(node);
}
}
/// <summary>
/// 更正路径
/// </summary>
/// <param name="node"></param>
private void CorrectPath(TreeNode node)
{
string[] paths = node.NavigateUrl.Split(',');
string path = "";
for(int i = 0 ; i < paths.Length ; i ++)
{
if(paths[i].Trim()!="")
{
if(path == "")
{
path += paths[i].Trim();
}
else
{
path += "," + paths[i].Trim();
}
}
}
node.NavigateUrl = path;
node.NavigateUrl += "&DeptName=" + Server.UrlEncode(node.Text.Trim());
foreach(TreeNode Node in node.Nodes)
{
this.CorrectPath(Node);
}
}
/// <summary>
/// 展开所有的节点
/// </summary>
/// <param name="node"></param>
private void ExpandNode(TreeNode node)
{
foreach(TreeNode Node in node.Nodes)
{
Node.Expanded = true;
if(Node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
Node.NavigateUrl = Node.NavigateUrl.Substring(0,Node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
Node.NavigateUrl = Node.NavigateUrl.Trim() +",";
}
Node.ImageUrl="";
try
{
this.ExpandNode(Node);
}
catch
{
break;
}
}
}
/// <summary>
/// 反向递归出子节点
/// </summary>
/// <param name="node"></param>
/// <param name="UnderPath"></param>
private void GetChildrenQueryString(TreeNode node,ref string UnderPath)
{
string p = "";
if(node.Nodes.Count > 0 )
{
foreach(TreeNode Node in node.Nodes)
{
this.GetChildrenQueryString(Node,ref p);
p += this.ParsePath(Node).Trim()+",";
}
node.NavigateUrl += p;
}
}
/// <summary>
/// 分析出Group_ID
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private string ParsePath(TreeNode node)
{
string OriginalPath = node.NavigateUrl;
if(OriginalPath.IndexOf("Group_ID") == -1)
{
return "";
}
else
{
string ParsedPath = OriginalPath.Substring((OriginalPath.IndexOf("=")+1));
return ParsedPath.Trim();
}
}
/// </summary>
public class BranchList : PageBaseIContentCn
{
protected Microsoft.Web.UI.WebControls.TreeView tvBranchList;
protected System.Web.UI.HtmlControls.HtmlGenericControl dvTree;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.InitBase();
if(!IsPostBack)
{
this.FillTreeView();
}
}
private void FillTreeView()
{
OrgChart OC = new OrgChart(ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetGroups = OrgChart.get_NodeBySystem(this.UserLoginCur.IdEmployee.Trim(),"IContent",ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetTarget = "frPickBuilding";
OC.Image_Url = "../images/admin.gif";
OC.Emp_Url = "PreviewPickBuilding.aspx";
OC.Group_Url = "PreviewPickBuilding.aspx";
foreach(Microsoft.Web.UI.WebControls.TreeNode Node in OC.BuildTreeNodes())
{
this.tvBranchList.Nodes.Add(Node);
//Node.Expanded = true;
}
//递归算法展开所有的子节点
foreach(Microsoft.Web.UI.WebControls.TreeNode node in this.tvBranchList.Nodes)
{
node.Expanded = true;
if(node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
node.NavigateUrl = node.NavigateUrl.Substring(0,node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
node.NavigateUrl = node.NavigateUrl.Trim()+",";
}
//去掉图片
node.ImageUrl="";
this.ExpandNode(node);
//反向递归出子节点
string Path = "";
this.GetChildrenQueryString(node,ref Path);
//更正路径
this.CorrectPath(node);
}
}
/// <summary>
/// 更正路径
/// </summary>
/// <param name="node"></param>
private void CorrectPath(TreeNode node)
{
string[] paths = node.NavigateUrl.Split(',');
string path = "";
for(int i = 0 ; i < paths.Length ; i ++)
{
if(paths[i].Trim()!="")
{
if(path == "")
{
path += paths[i].Trim();
}
else
{
path += "," + paths[i].Trim();
}
}
}
node.NavigateUrl = path;
node.NavigateUrl += "&DeptName=" + Server.UrlEncode(node.Text.Trim());
foreach(TreeNode Node in node.Nodes)
{
this.CorrectPath(Node);
}
}
/// <summary>
/// 展开所有的节点
/// </summary>
/// <param name="node"></param>
private void ExpandNode(TreeNode node)
{
foreach(TreeNode Node in node.Nodes)
{
Node.Expanded = true;
if(Node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
Node.NavigateUrl = Node.NavigateUrl.Substring(0,Node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
Node.NavigateUrl = Node.NavigateUrl.Trim() +",";
}
Node.ImageUrl="";
try
{
this.ExpandNode(Node);
}
catch
{
break;
}
}
}
/// <summary>
/// 反向递归出子节点
/// </summary>
/// <param name="node"></param>
/// <param name="UnderPath"></param>
private void GetChildrenQueryString(TreeNode node,ref string UnderPath)
{
string p = "";
if(node.Nodes.Count > 0 )
{
foreach(TreeNode Node in node.Nodes)
{
this.GetChildrenQueryString(Node,ref p);
p += this.ParsePath(Node).Trim()+",";
}
node.NavigateUrl += p;
}
}
/// <summary>
/// 分析出Group_ID
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private string ParsePath(TreeNode node)
{
string OriginalPath = node.NavigateUrl;
if(OriginalPath.IndexOf("Group_ID") == -1)
{
return "";
}
else
{
string ParsedPath = OriginalPath.Substring((OriginalPath.IndexOf("=")+1));
return ParsedPath.Trim();
}
}
#7
private void ShowForm(int ComID,int ParnID)
{
//DataSet 已经取得
if(sqlDS.Tables[ParnID.ToString()].Rows.Count<=0)
{
return;
}
else
{
int i=0,num=0,k;
int typeid;
//string nodeNode,wnode,snode;
while(Count>0)
{ if(ParnID==0) //数据库中的parnid 与 typeid 的关系是父子关系。 这里我是人为的判断,但是,递归以后,子节点还有节点,这时候就变成平级的了。 这个方法肯定不对,希望高手给与指教!!
{
DataRow dr= sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode nNode=new TreeNode(dr["ProName"].ToString());
treeView1.TopNode.Nodes.Add(nNode);
typeid = Convert.ToInt32(dr["TypeID"].ToString());
}
else
{
DataRow drw = sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode aNode=new TreeNode(drw["ProName"].ToString());
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);
typeid = Convert.ToInt32(drw["TypeID"].ToString());
}
ShowForm(ComID,typeid);
Count--;
}
}
}
}
{
//DataSet 已经取得
if(sqlDS.Tables[ParnID.ToString()].Rows.Count<=0)
{
return;
}
else
{
int i=0,num=0,k;
int typeid;
//string nodeNode,wnode,snode;
while(Count>0)
{ if(ParnID==0) //数据库中的parnid 与 typeid 的关系是父子关系。 这里我是人为的判断,但是,递归以后,子节点还有节点,这时候就变成平级的了。 这个方法肯定不对,希望高手给与指教!!
{
DataRow dr= sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode nNode=new TreeNode(dr["ProName"].ToString());
treeView1.TopNode.Nodes.Add(nNode);
typeid = Convert.ToInt32(dr["TypeID"].ToString());
}
else
{
DataRow drw = sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode aNode=new TreeNode(drw["ProName"].ToString());
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);
typeid = Convert.ToInt32(drw["TypeID"].ToString());
}
ShowForm(ComID,typeid);
Count--;
}
}
}
}
#8
up
#9
ComID好象没有什么用啊。
感觉
while(Count>0)
{
if(ParnID==0)
{
...
}
}
这个地方的coding有点混乱
感觉
while(Count>0)
{
if(ParnID==0)
{
...
}
}
这个地方的coding有点混乱
#10
问一下 if(ParnID==0)是否是“如果没有父节点”
#11
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);
这行代码肯定有问题。你打断点看看。
这行代码肯定有问题。你打断点看看。
#12
ComID 是在之前的记录级里取得的。然后调用函数,给的值。
不是,等于0在数据库里代表他是最初的根节点。
不是,等于0在数据库里代表他是最初的根节点。
#13
我的程序已经运行,现在我想说的就是怎么创建下一个子节点,因为它是在递归里面的。
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);--- 这一句是创建上一个的子节点,那么子节点的子节点呢???(现在感觉要有个变量) 如何创建??? 要怎么一样呢?
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);--- 这一句是创建上一个的子节点,那么子节点的子节点呢???(现在感觉要有个变量) 如何创建??? 要怎么一样呢?
#14
你在递归中没有指明子节点是加到哪个节点下的呀???
建议你在递归中传入多一个参数
TreeNode currNode
表示当前节点,以便递归时知道把子节点插入到哪个节点
建议你在递归中传入多一个参数
TreeNode currNode
表示当前节点,以便递归时知道把子节点插入到哪个节点
#15
这个参数是怎么写的阿?? --- private void ShowForm(TreeNode currNode,int ComID,int ParnID)
如何调用?? -- ShowForm(treeView1,ComID,0);
如何调用?? -- ShowForm(treeView1,ComID,0);
#16
看看下面这个思路,然后加上其他必要的代码就可以了
private void AddTopNodes()
{
//*******************************************************
DataRow[] topNodes;//获取*节点的行。即代号为两位的节点
//*******************************************************
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
private string GetNodeName(string nodeID)
{
//*******************************************************
//获取给出代号的节点名称
//即 如为010101,则返回‘a市1中心’
//*******************************************************
}
private void AddTopNodes()
{
//*******************************************************
DataRow[] topNodes;//获取*节点的行。即代号为两位的节点
//*******************************************************
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
private string GetNodeName(string nodeID)
{
//*******************************************************
//获取给出代号的节点名称
//即 如为010101,则返回‘a市1中心’
//*******************************************************
}
#17
我这边已经测试通过,下面是完整代码。
using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsApplication1
{
/// <summary>
/// Form4 的摘要说明。
/// </summary>
public class Form4 : System.Windows.Forms.Form
{
private DataTable tNodes = new DataTable();
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form4()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
this.tNodes.Columns.Add("ProName",Type.GetType("System.String"));
this.tNodes.Columns.Add("TypeID",Type.GetType("System.String"));
this.tNodes.PrimaryKey = new DataColumn[]{this.tNodes.Columns["TypeID"]};
this.tNodes.Rows.Add(new object[]{"中国","01"});
this.tNodes.Rows.Add(new object[]{"城市a","0101"});
this.tNodes.Rows.Add(new object[]{"a市1中心","010101"});
this.tNodes.Rows.Add(new object[]{"1中心A区","01010101"});
this.tNodes.Rows.Add(new object[]{"1中心B区","01010102"});
this.tNodes.Rows.Add(new object[]{"a市2中心","010102"});
this.tNodes.Rows.Add(new object[]{"a市3中心","010103"});
this.tNodes.Rows.Add(new object[]{"3中心A区","01010301"});
this.tNodes.Rows.Add(new object[]{"城市b","0102"});
this.tNodes.Rows.Add(new object[]{"法国","02"});
this.tNodes.Rows.Add(new object[]{"城市a","0201"});
this.tNodes.Rows.Add(new object[]{"a市1中心","020101"});
this.tNodes.Rows.Add(new object[]{"a市2中心","020102"});
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(16, 16);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(296, 288);
this.treeView1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(328, 176);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "添加节点";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form4
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(408, 325);
this.Controls.Add(this.button1);
this.Controls.Add(this.treeView1);
this.Name = "Form4";
this.Text = "Form4";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form4());
}
private void AddTopNodes()
{
DataRow[] topNodes = this.tNodes.Select("Len(TypeID)=2");
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
return this.tNodes.Select("Len(TypeID)="+(currTypeID.Length+2).ToString()+" AND TypeID Like '"+currTypeID+"%'");
}
private string GetNodeName(string nodeID)
{
DataRow pk = this.tNodes.Rows.Find(nodeID);
if(pk!=null)
{
return pk["ProName"].ToString();
}
else
{
return string.Empty;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
this.AddTopNodes();
this.button1.Enabled = false;
}
}
}
using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsApplication1
{
/// <summary>
/// Form4 的摘要说明。
/// </summary>
public class Form4 : System.Windows.Forms.Form
{
private DataTable tNodes = new DataTable();
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form4()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
this.tNodes.Columns.Add("ProName",Type.GetType("System.String"));
this.tNodes.Columns.Add("TypeID",Type.GetType("System.String"));
this.tNodes.PrimaryKey = new DataColumn[]{this.tNodes.Columns["TypeID"]};
this.tNodes.Rows.Add(new object[]{"中国","01"});
this.tNodes.Rows.Add(new object[]{"城市a","0101"});
this.tNodes.Rows.Add(new object[]{"a市1中心","010101"});
this.tNodes.Rows.Add(new object[]{"1中心A区","01010101"});
this.tNodes.Rows.Add(new object[]{"1中心B区","01010102"});
this.tNodes.Rows.Add(new object[]{"a市2中心","010102"});
this.tNodes.Rows.Add(new object[]{"a市3中心","010103"});
this.tNodes.Rows.Add(new object[]{"3中心A区","01010301"});
this.tNodes.Rows.Add(new object[]{"城市b","0102"});
this.tNodes.Rows.Add(new object[]{"法国","02"});
this.tNodes.Rows.Add(new object[]{"城市a","0201"});
this.tNodes.Rows.Add(new object[]{"a市1中心","020101"});
this.tNodes.Rows.Add(new object[]{"a市2中心","020102"});
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(16, 16);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(296, 288);
this.treeView1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(328, 176);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "添加节点";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form4
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(408, 325);
this.Controls.Add(this.button1);
this.Controls.Add(this.treeView1);
this.Name = "Form4";
this.Text = "Form4";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form4());
}
private void AddTopNodes()
{
DataRow[] topNodes = this.tNodes.Select("Len(TypeID)=2");
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
return this.tNodes.Select("Len(TypeID)="+(currTypeID.Length+2).ToString()+" AND TypeID Like '"+currTypeID+"%'");
}
private string GetNodeName(string nodeID)
{
DataRow pk = this.tNodes.Rows.Find(nodeID);
if(pk!=null)
{
return pk["ProName"].ToString();
}
else
{
return string.Empty;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
this.AddTopNodes();
this.button1.Enabled = false;
}
}
}
#18
关注
#19
唉,好长的代码,帮你顶一下好了。
#20
不好意思,这个还是不太明白。 请说明一下。
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
#21
lj码真多啊
#22
接着问,在之前我的DataSet是这样做的:DataSet sqlDS = new DataSet(); sqlDOA.Fill(sqlDS,ParnID.ToString()); 现在你的是DataTable 我应该如何改呢? 还有我的判断节点的条件是根据sql语句的查询,而你是在table对象里面的判断,我这里应该怎么做呢? tNodes.Select这里面可以写什么,查询语句????
#23
簡單照Vb的思路,將語法更改!
我就是這樣做得
我就是這樣做得
#24
我的结构是
TypeID ParnID
36 0
37 0
38 36
39 36
40 36
41 36
42 41
43 36
44 36
45 37
46 37
47 37
48 37
49 37
60 0
61 60
62 60
TypeID ParnID
36 0
37 0
38 36
39 36
40 36
41 36
42 41
43 36
44 36
45 37
46 37
47 37
48 37
49 37
60 0
61 60
62 60
#25
着急啊!!!
#26
zhongjy001(.)
代碼都已經實現了
代碼都已經實現了
#27
DataSet相当于是一个数据库
Table 是DataSet中的一个表
取Table具体得看你填充DataSet使用的Sql语句,
即sqlDOA.Fill(sqlDS,ParnID.ToString()); 中的ParnID是什么
你把它帖出来看看
Table 是DataSet中的一个表
取Table具体得看你填充DataSet使用的Sql语句,
即sqlDOA.Fill(sqlDS,ParnID.ToString()); 中的ParnID是什么
你把它帖出来看看
#28
zhongjy001(.) 谢谢了。照你的思路我已经做出来了,今后还希望能够多多指教,感谢!!!
#1
顶!
#2
顶!
#3
把表结构贴出来看看
#4
这个方法太多了,还是贴你的程序我们来抓错吧。
#5
名称 节点号
中国 01
城市a 0101
a市1中心 010101
1中心A区 01010101
1中心B区 01010102
a市2中心 010102
a市3中心 010103
3中心A区 01010301
城市b 0102
法国 02
城市a 0201
a市1中心 020101
a市2中心 020102
中国 01
城市a 0101
a市1中心 010101
1中心A区 01010101
1中心B区 01010102
a市2中心 010102
a市3中心 010103
3中心A区 01010301
城市b 0102
法国 02
城市a 0201
a市1中心 020101
a市2中心 020102
#6
/// BranchList 的摘要说明。
/// </summary>
public class BranchList : PageBaseIContentCn
{
protected Microsoft.Web.UI.WebControls.TreeView tvBranchList;
protected System.Web.UI.HtmlControls.HtmlGenericControl dvTree;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.InitBase();
if(!IsPostBack)
{
this.FillTreeView();
}
}
private void FillTreeView()
{
OrgChart OC = new OrgChart(ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetGroups = OrgChart.get_NodeBySystem(this.UserLoginCur.IdEmployee.Trim(),"IContent",ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetTarget = "frPickBuilding";
OC.Image_Url = "../images/admin.gif";
OC.Emp_Url = "PreviewPickBuilding.aspx";
OC.Group_Url = "PreviewPickBuilding.aspx";
foreach(Microsoft.Web.UI.WebControls.TreeNode Node in OC.BuildTreeNodes())
{
this.tvBranchList.Nodes.Add(Node);
//Node.Expanded = true;
}
//递归算法展开所有的子节点
foreach(Microsoft.Web.UI.WebControls.TreeNode node in this.tvBranchList.Nodes)
{
node.Expanded = true;
if(node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
node.NavigateUrl = node.NavigateUrl.Substring(0,node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
node.NavigateUrl = node.NavigateUrl.Trim()+",";
}
//去掉图片
node.ImageUrl="";
this.ExpandNode(node);
//反向递归出子节点
string Path = "";
this.GetChildrenQueryString(node,ref Path);
//更正路径
this.CorrectPath(node);
}
}
/// <summary>
/// 更正路径
/// </summary>
/// <param name="node"></param>
private void CorrectPath(TreeNode node)
{
string[] paths = node.NavigateUrl.Split(',');
string path = "";
for(int i = 0 ; i < paths.Length ; i ++)
{
if(paths[i].Trim()!="")
{
if(path == "")
{
path += paths[i].Trim();
}
else
{
path += "," + paths[i].Trim();
}
}
}
node.NavigateUrl = path;
node.NavigateUrl += "&DeptName=" + Server.UrlEncode(node.Text.Trim());
foreach(TreeNode Node in node.Nodes)
{
this.CorrectPath(Node);
}
}
/// <summary>
/// 展开所有的节点
/// </summary>
/// <param name="node"></param>
private void ExpandNode(TreeNode node)
{
foreach(TreeNode Node in node.Nodes)
{
Node.Expanded = true;
if(Node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
Node.NavigateUrl = Node.NavigateUrl.Substring(0,Node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
Node.NavigateUrl = Node.NavigateUrl.Trim() +",";
}
Node.ImageUrl="";
try
{
this.ExpandNode(Node);
}
catch
{
break;
}
}
}
/// <summary>
/// 反向递归出子节点
/// </summary>
/// <param name="node"></param>
/// <param name="UnderPath"></param>
private void GetChildrenQueryString(TreeNode node,ref string UnderPath)
{
string p = "";
if(node.Nodes.Count > 0 )
{
foreach(TreeNode Node in node.Nodes)
{
this.GetChildrenQueryString(Node,ref p);
p += this.ParsePath(Node).Trim()+",";
}
node.NavigateUrl += p;
}
}
/// <summary>
/// 分析出Group_ID
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private string ParsePath(TreeNode node)
{
string OriginalPath = node.NavigateUrl;
if(OriginalPath.IndexOf("Group_ID") == -1)
{
return "";
}
else
{
string ParsedPath = OriginalPath.Substring((OriginalPath.IndexOf("=")+1));
return ParsedPath.Trim();
}
}
/// </summary>
public class BranchList : PageBaseIContentCn
{
protected Microsoft.Web.UI.WebControls.TreeView tvBranchList;
protected System.Web.UI.HtmlControls.HtmlGenericControl dvTree;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.InitBase();
if(!IsPostBack)
{
this.FillTreeView();
}
}
private void FillTreeView()
{
OrgChart OC = new OrgChart(ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetGroups = OrgChart.get_NodeBySystem(this.UserLoginCur.IdEmployee.Trim(),"IContent",ConfigurationSettings.AppSettings[C.SetingName.Oc].Trim());
OC.SetTarget = "frPickBuilding";
OC.Image_Url = "../images/admin.gif";
OC.Emp_Url = "PreviewPickBuilding.aspx";
OC.Group_Url = "PreviewPickBuilding.aspx";
foreach(Microsoft.Web.UI.WebControls.TreeNode Node in OC.BuildTreeNodes())
{
this.tvBranchList.Nodes.Add(Node);
//Node.Expanded = true;
}
//递归算法展开所有的子节点
foreach(Microsoft.Web.UI.WebControls.TreeNode node in this.tvBranchList.Nodes)
{
node.Expanded = true;
if(node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
node.NavigateUrl = node.NavigateUrl.Substring(0,node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
node.NavigateUrl = node.NavigateUrl.Trim()+",";
}
//去掉图片
node.ImageUrl="";
this.ExpandNode(node);
//反向递归出子节点
string Path = "";
this.GetChildrenQueryString(node,ref Path);
//更正路径
this.CorrectPath(node);
}
}
/// <summary>
/// 更正路径
/// </summary>
/// <param name="node"></param>
private void CorrectPath(TreeNode node)
{
string[] paths = node.NavigateUrl.Split(',');
string path = "";
for(int i = 0 ; i < paths.Length ; i ++)
{
if(paths[i].Trim()!="")
{
if(path == "")
{
path += paths[i].Trim();
}
else
{
path += "," + paths[i].Trim();
}
}
}
node.NavigateUrl = path;
node.NavigateUrl += "&DeptName=" + Server.UrlEncode(node.Text.Trim());
foreach(TreeNode Node in node.Nodes)
{
this.CorrectPath(Node);
}
}
/// <summary>
/// 展开所有的节点
/// </summary>
/// <param name="node"></param>
private void ExpandNode(TreeNode node)
{
foreach(TreeNode Node in node.Nodes)
{
Node.Expanded = true;
if(Node.NavigateUrl.IndexOf("Group_ID=") == -1)
{
Node.NavigateUrl = Node.NavigateUrl.Substring(0,Node.NavigateUrl.IndexOf("?")+1)+"Group_ID=";
}
else
{
Node.NavigateUrl = Node.NavigateUrl.Trim() +",";
}
Node.ImageUrl="";
try
{
this.ExpandNode(Node);
}
catch
{
break;
}
}
}
/// <summary>
/// 反向递归出子节点
/// </summary>
/// <param name="node"></param>
/// <param name="UnderPath"></param>
private void GetChildrenQueryString(TreeNode node,ref string UnderPath)
{
string p = "";
if(node.Nodes.Count > 0 )
{
foreach(TreeNode Node in node.Nodes)
{
this.GetChildrenQueryString(Node,ref p);
p += this.ParsePath(Node).Trim()+",";
}
node.NavigateUrl += p;
}
}
/// <summary>
/// 分析出Group_ID
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private string ParsePath(TreeNode node)
{
string OriginalPath = node.NavigateUrl;
if(OriginalPath.IndexOf("Group_ID") == -1)
{
return "";
}
else
{
string ParsedPath = OriginalPath.Substring((OriginalPath.IndexOf("=")+1));
return ParsedPath.Trim();
}
}
#7
private void ShowForm(int ComID,int ParnID)
{
//DataSet 已经取得
if(sqlDS.Tables[ParnID.ToString()].Rows.Count<=0)
{
return;
}
else
{
int i=0,num=0,k;
int typeid;
//string nodeNode,wnode,snode;
while(Count>0)
{ if(ParnID==0) //数据库中的parnid 与 typeid 的关系是父子关系。 这里我是人为的判断,但是,递归以后,子节点还有节点,这时候就变成平级的了。 这个方法肯定不对,希望高手给与指教!!
{
DataRow dr= sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode nNode=new TreeNode(dr["ProName"].ToString());
treeView1.TopNode.Nodes.Add(nNode);
typeid = Convert.ToInt32(dr["TypeID"].ToString());
}
else
{
DataRow drw = sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode aNode=new TreeNode(drw["ProName"].ToString());
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);
typeid = Convert.ToInt32(drw["TypeID"].ToString());
}
ShowForm(ComID,typeid);
Count--;
}
}
}
}
{
//DataSet 已经取得
if(sqlDS.Tables[ParnID.ToString()].Rows.Count<=0)
{
return;
}
else
{
int i=0,num=0,k;
int typeid;
//string nodeNode,wnode,snode;
while(Count>0)
{ if(ParnID==0) //数据库中的parnid 与 typeid 的关系是父子关系。 这里我是人为的判断,但是,递归以后,子节点还有节点,这时候就变成平级的了。 这个方法肯定不对,希望高手给与指教!!
{
DataRow dr= sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode nNode=new TreeNode(dr["ProName"].ToString());
treeView1.TopNode.Nodes.Add(nNode);
typeid = Convert.ToInt32(dr["TypeID"].ToString());
}
else
{
DataRow drw = sqlDS.Tables[ParnID.ToString()].Rows[i++];
System.Windows.Forms.TreeNode aNode=new TreeNode(drw["ProName"].ToString());
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);
typeid = Convert.ToInt32(drw["TypeID"].ToString());
}
ShowForm(ComID,typeid);
Count--;
}
}
}
}
#8
up
#9
ComID好象没有什么用啊。
感觉
while(Count>0)
{
if(ParnID==0)
{
...
}
}
这个地方的coding有点混乱
感觉
while(Count>0)
{
if(ParnID==0)
{
...
}
}
这个地方的coding有点混乱
#10
问一下 if(ParnID==0)是否是“如果没有父节点”
#11
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);
这行代码肯定有问题。你打断点看看。
这行代码肯定有问题。你打断点看看。
#12
ComID 是在之前的记录级里取得的。然后调用函数,给的值。
不是,等于0在数据库里代表他是最初的根节点。
不是,等于0在数据库里代表他是最初的根节点。
#13
我的程序已经运行,现在我想说的就是怎么创建下一个子节点,因为它是在递归里面的。
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);--- 这一句是创建上一个的子节点,那么子节点的子节点呢???(现在感觉要有个变量) 如何创建??? 要怎么一样呢?
treeView1.Nodes[0].Nodes[0].Nodes.Add(aNode);--- 这一句是创建上一个的子节点,那么子节点的子节点呢???(现在感觉要有个变量) 如何创建??? 要怎么一样呢?
#14
你在递归中没有指明子节点是加到哪个节点下的呀???
建议你在递归中传入多一个参数
TreeNode currNode
表示当前节点,以便递归时知道把子节点插入到哪个节点
建议你在递归中传入多一个参数
TreeNode currNode
表示当前节点,以便递归时知道把子节点插入到哪个节点
#15
这个参数是怎么写的阿?? --- private void ShowForm(TreeNode currNode,int ComID,int ParnID)
如何调用?? -- ShowForm(treeView1,ComID,0);
如何调用?? -- ShowForm(treeView1,ComID,0);
#16
看看下面这个思路,然后加上其他必要的代码就可以了
private void AddTopNodes()
{
//*******************************************************
DataRow[] topNodes;//获取*节点的行。即代号为两位的节点
//*******************************************************
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
private string GetNodeName(string nodeID)
{
//*******************************************************
//获取给出代号的节点名称
//即 如为010101,则返回‘a市1中心’
//*******************************************************
}
private void AddTopNodes()
{
//*******************************************************
DataRow[] topNodes;//获取*节点的行。即代号为两位的节点
//*******************************************************
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
private string GetNodeName(string nodeID)
{
//*******************************************************
//获取给出代号的节点名称
//即 如为010101,则返回‘a市1中心’
//*******************************************************
}
#17
我这边已经测试通过,下面是完整代码。
using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsApplication1
{
/// <summary>
/// Form4 的摘要说明。
/// </summary>
public class Form4 : System.Windows.Forms.Form
{
private DataTable tNodes = new DataTable();
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form4()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
this.tNodes.Columns.Add("ProName",Type.GetType("System.String"));
this.tNodes.Columns.Add("TypeID",Type.GetType("System.String"));
this.tNodes.PrimaryKey = new DataColumn[]{this.tNodes.Columns["TypeID"]};
this.tNodes.Rows.Add(new object[]{"中国","01"});
this.tNodes.Rows.Add(new object[]{"城市a","0101"});
this.tNodes.Rows.Add(new object[]{"a市1中心","010101"});
this.tNodes.Rows.Add(new object[]{"1中心A区","01010101"});
this.tNodes.Rows.Add(new object[]{"1中心B区","01010102"});
this.tNodes.Rows.Add(new object[]{"a市2中心","010102"});
this.tNodes.Rows.Add(new object[]{"a市3中心","010103"});
this.tNodes.Rows.Add(new object[]{"3中心A区","01010301"});
this.tNodes.Rows.Add(new object[]{"城市b","0102"});
this.tNodes.Rows.Add(new object[]{"法国","02"});
this.tNodes.Rows.Add(new object[]{"城市a","0201"});
this.tNodes.Rows.Add(new object[]{"a市1中心","020101"});
this.tNodes.Rows.Add(new object[]{"a市2中心","020102"});
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(16, 16);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(296, 288);
this.treeView1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(328, 176);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "添加节点";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form4
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(408, 325);
this.Controls.Add(this.button1);
this.Controls.Add(this.treeView1);
this.Name = "Form4";
this.Text = "Form4";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form4());
}
private void AddTopNodes()
{
DataRow[] topNodes = this.tNodes.Select("Len(TypeID)=2");
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
return this.tNodes.Select("Len(TypeID)="+(currTypeID.Length+2).ToString()+" AND TypeID Like '"+currTypeID+"%'");
}
private string GetNodeName(string nodeID)
{
DataRow pk = this.tNodes.Rows.Find(nodeID);
if(pk!=null)
{
return pk["ProName"].ToString();
}
else
{
return string.Empty;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
this.AddTopNodes();
this.button1.Enabled = false;
}
}
}
using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsApplication1
{
/// <summary>
/// Form4 的摘要说明。
/// </summary>
public class Form4 : System.Windows.Forms.Form
{
private DataTable tNodes = new DataTable();
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form4()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
this.tNodes.Columns.Add("ProName",Type.GetType("System.String"));
this.tNodes.Columns.Add("TypeID",Type.GetType("System.String"));
this.tNodes.PrimaryKey = new DataColumn[]{this.tNodes.Columns["TypeID"]};
this.tNodes.Rows.Add(new object[]{"中国","01"});
this.tNodes.Rows.Add(new object[]{"城市a","0101"});
this.tNodes.Rows.Add(new object[]{"a市1中心","010101"});
this.tNodes.Rows.Add(new object[]{"1中心A区","01010101"});
this.tNodes.Rows.Add(new object[]{"1中心B区","01010102"});
this.tNodes.Rows.Add(new object[]{"a市2中心","010102"});
this.tNodes.Rows.Add(new object[]{"a市3中心","010103"});
this.tNodes.Rows.Add(new object[]{"3中心A区","01010301"});
this.tNodes.Rows.Add(new object[]{"城市b","0102"});
this.tNodes.Rows.Add(new object[]{"法国","02"});
this.tNodes.Rows.Add(new object[]{"城市a","0201"});
this.tNodes.Rows.Add(new object[]{"a市1中心","020101"});
this.tNodes.Rows.Add(new object[]{"a市2中心","020102"});
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(16, 16);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(296, 288);
this.treeView1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(328, 176);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "添加节点";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form4
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(408, 325);
this.Controls.Add(this.button1);
this.Controls.Add(this.treeView1);
this.Name = "Form4";
this.Text = "Form4";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form4());
}
private void AddTopNodes()
{
DataRow[] topNodes = this.tNodes.Select("Len(TypeID)=2");
foreach(DataRow topNode in topNodes)
{
TreeNode topTN = new TreeNode(topNode["ProName"].ToString());
this.treeView1.Nodes.Add(topTN);
DataRow[] childNodes = this.GetChildNodes(topNode["TypeID"].ToString());
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(topTN,childNode["TypeID"].ToString());
}
}
}
private void AddChildNodes(TreeNode currNode,string childNodeID)
{
TreeNode childTN = new TreeNode(this.GetNodeName(childNodeID));
currNode.Nodes.Add(childTN);
DataRow[] childNodes = this.GetChildNodes(childNodeID);
foreach(DataRow childNode in childNodes)
{
this.AddChildNodes(childTN,childNode["TypeID"].ToString());
}
}
private DataRow[] GetChildNodes(string currTypeID)
{
return this.tNodes.Select("Len(TypeID)="+(currTypeID.Length+2).ToString()+" AND TypeID Like '"+currTypeID+"%'");
}
private string GetNodeName(string nodeID)
{
DataRow pk = this.tNodes.Rows.Find(nodeID);
if(pk!=null)
{
return pk["ProName"].ToString();
}
else
{
return string.Empty;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
this.AddTopNodes();
this.button1.Enabled = false;
}
}
}
#18
关注
#19
唉,好长的代码,帮你顶一下好了。
#20
不好意思,这个还是不太明白。 请说明一下。
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
private DataRow[] GetChildNodes(string currTypeID)
{
//*******************************************************
//获取给出代号节点的所有子节点的行集合
//即 代号为给出代号长度加2,并且代号 like 'currTypeID%'的节点
//*******************************************************
}
#21
lj码真多啊
#22
接着问,在之前我的DataSet是这样做的:DataSet sqlDS = new DataSet(); sqlDOA.Fill(sqlDS,ParnID.ToString()); 现在你的是DataTable 我应该如何改呢? 还有我的判断节点的条件是根据sql语句的查询,而你是在table对象里面的判断,我这里应该怎么做呢? tNodes.Select这里面可以写什么,查询语句????
#23
簡單照Vb的思路,將語法更改!
我就是這樣做得
我就是這樣做得
#24
我的结构是
TypeID ParnID
36 0
37 0
38 36
39 36
40 36
41 36
42 41
43 36
44 36
45 37
46 37
47 37
48 37
49 37
60 0
61 60
62 60
TypeID ParnID
36 0
37 0
38 36
39 36
40 36
41 36
42 41
43 36
44 36
45 37
46 37
47 37
48 37
49 37
60 0
61 60
62 60
#25
着急啊!!!
#26
zhongjy001(.)
代碼都已經實現了
代碼都已經實現了
#27
DataSet相当于是一个数据库
Table 是DataSet中的一个表
取Table具体得看你填充DataSet使用的Sql语句,
即sqlDOA.Fill(sqlDS,ParnID.ToString()); 中的ParnID是什么
你把它帖出来看看
Table 是DataSet中的一个表
取Table具体得看你填充DataSet使用的Sql语句,
即sqlDOA.Fill(sqlDS,ParnID.ToString()); 中的ParnID是什么
你把它帖出来看看
#28
zhongjy001(.) 谢谢了。照你的思路我已经做出来了,今后还希望能够多多指教,感谢!!!