如何使用asp.net c#构建族树? [英] how to construct family tree using asp.net c#?

查看:84
本文介绍了如何使用asp.net c#构建族树?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用System;

使用System.Data;

使用System.Configuration;

使用System.Web;

使用System.Web.Security;

使用System.Web.UI;

使用System.Web.UI.WebControls;

使用System.Web.UI.WebControls.WebParts;

使用System.Web.UI.HtmlControls;

使用System.IO;

使用System.Collections.Generic;

使用System.Data.SqlClient;



public partial class _Default:System.Web.UI.Page

{

protected void Page_Load(object sender,EventArgs e)

{

PopulateTreeview();





}





private void PopulateTreeview( ){

this.tvHierarchyView.Nodes.Clear();

HierarchyTrees hierarchyTrees = new HierarchyTrees();

HierarchyTrees.HTree objHTree = null;

using(SqlConnection connection = new SqlConnection(Server = NAGESH2-PC\\SQLEXPRESS; Database = test1; Trusted_Connection = True ))

{

connection.Open();

using(SqlCommand command = new SqlCommand(SSP_GET_HIERARCHY,connection))

{command.CommandType = System.Data.CommandType.StoredProcedure;

SqlDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

while(reader.Read())

{

objHTree = new HierarchyTrees.HTree();



objHTree.LevelDepth = int.Parse(reader [LEVEL_DEPTH]。ToString());

objHTree.NodeID = int。 Parse(reader [NODE_ID]。ToString());

objHTree.UnderParent = int.Parse(reader [UNDER_PARENT]。ToString());

objHTree.NodeDescription = reader [NODE_DESCRIPTION]。ToString();

hierarchyTrees.Add(objHTree);

}

}

}

foreach(HierarchyTrees.HTree hTree in hierarchyTrees)

{

HierarchyTrees.HTree parentNode = hierarchyTrees.Find( delegate(HierarchyTrees.HTree emp){return emp.NodeID == hTree.UnderParent;});

if(parentNode!= null)

{

foreach(TVNierarchyView.Nodes中的TreeNode tn)

{

if(tn.Value == parentNode.NodeID.ToString())

{

tn.ChildNodes.Add(new TreeNode( hTree.NodeDescription.ToString(),hTree.NodeID.ToString()));

}

if(tn.ChildNodes.Count> 0)

{

foreach(tn.ChildNodes中的TreeNode ctn)

{

RecursiveChild(ctn,parentNode) .NodeID.ToString(),hTree);

}

}

}

}

else

{

tvHierarchyView.Nodes.Add(new TreeNode(hTree.NodeDescription,hTree.NodeID.ToString()));

}

}

tvHierarchyView.ExpandAll();

}



public void RecursiveChild(TreeNode tn,string searchValue,HierarchyTrees.HTree hTree)

{

if(tn.Value == searchValue)

{

tn.ChildNodes.Add(new TreeNode(hTree.NodeDescription.ToString(), hTree.NodeID.ToString()));

}

if(tn.ChildNodes.Count> 0)

{

foreach(tn.ChildNodes中的TreeNode ctn)

{

RecursiveChild(ctn,searchValue,hTree);

} < br $>
}

}





公共类HierarchyTrees:List< hierarchytrees.htree> ;

{

公共类HTree

{

私有字符串m_NodeDescription;

私有int m_UnderParent;

private int m_LevelDepth;

private int m_NodeID;



public int NodeID

{get {return m_NodeID;}

set {m_NodeID = value; }
}



公共字符串NodeDescription

{

get {return m_NodeDescription ; }

set {m_NodeDescription = value; }

}

public int UnderParent

{

get {return m_UnderParent; }

set {m_UnderParent = value; }

}

public int LevelDepth

{

get {return m_LevelDepth; }

set {m_LevelDepth = value; }

}

}

}

}

输出:输出即将到来那样。

折叠数学数学

折叠代数代数



小学代数



抽象代数



线性代数

折叠几何几何



折叠三角形三角形





按相对长度折叠相对长度







折叠等边三角形等边三角形









所有面积相等







Scalene Triangle







Isosceles Triangle




内部角度按内角折叠







Oblique> 90度:Obtuse Angled Traingle







Oblique< 90度:急性角度滑动







直角三角形



但我想要输出结构如:



admin

----------- ------------- | --------------------------

| |

用户学生



|

-------------- --------

| |

using System;
using System.Data;
using System.Configuration;
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.IO;
using System.Collections.Generic;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PopulateTreeview();


}


private void PopulateTreeview() {
this.tvHierarchyView.Nodes.Clear();
HierarchyTrees hierarchyTrees = new HierarchyTrees();
HierarchyTrees.HTree objHTree=null;
using (SqlConnection connection = new SqlConnection("Server = NAGESH2-PC\\SQLEXPRESS; Database = test1; Trusted_Connection = True"))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SSP_GET_HIERARCHY", connection))
{ command.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
while (reader.Read())
{
objHTree=new HierarchyTrees.HTree();

objHTree.LevelDepth = int.Parse(reader["LEVEL_DEPTH"].ToString());
objHTree.NodeID = int.Parse(reader["NODE_ID"].ToString());
objHTree.UnderParent = int.Parse(reader["UNDER_PARENT"].ToString());
objHTree.NodeDescription = reader["NODE_DESCRIPTION"].ToString();
hierarchyTrees.Add(objHTree);
}
}
}
foreach (HierarchyTrees.HTree hTree in hierarchyTrees)
{
HierarchyTrees.HTree parentNode = hierarchyTrees.Find(delegate(HierarchyTrees.HTree emp) { return emp.NodeID == hTree.UnderParent; });
if (parentNode != null)
{
foreach (TreeNode tn in tvHierarchyView.Nodes)
{
if (tn.Value == parentNode.NodeID.ToString())
{
tn.ChildNodes.Add(new TreeNode(hTree.NodeDescription.ToString(), hTree.NodeID.ToString()));
}
if (tn.ChildNodes.Count > 0)
{
foreach (TreeNode ctn in tn.ChildNodes)
{
RecursiveChild(ctn, parentNode.NodeID.ToString(), hTree);
}
}
}
}
else
{
tvHierarchyView.Nodes.Add(new TreeNode(hTree.NodeDescription, hTree.NodeID.ToString()));
}
}
tvHierarchyView.ExpandAll();
}

public void RecursiveChild(TreeNode tn, string searchValue, HierarchyTrees.HTree hTree)
{
if (tn.Value == searchValue)
{
tn.ChildNodes.Add(new TreeNode(hTree.NodeDescription.ToString(), hTree.NodeID.ToString()));
}
if (tn.ChildNodes.Count > 0)
{
foreach (TreeNode ctn in tn.ChildNodes)
{
RecursiveChild(ctn, searchValue,hTree);
}
}
}


public class HierarchyTrees : List<hierarchytrees.htree>
{
public class HTree
{
private string m_NodeDescription;
private int m_UnderParent;
private int m_LevelDepth;
private int m_NodeID;

public int NodeID
{ get {return m_NodeID;}
set { m_NodeID=value; }
}

public string NodeDescription
{
get { return m_NodeDescription; }
set { m_NodeDescription = value; }
}
public int UnderParent
{
get { return m_UnderParent; }
set { m_UnderParent = value; }
}
public int LevelDepth
{
get { return m_LevelDepth; }
set { m_LevelDepth = value; }
}
}
}
}
output:output is coming like that.
Collapse Mathematics Mathematics
Collapse Algebra Algebra

Elementary Algebra

Abstract Algebra

Linear Algebra
Collapse Geometry Geometry

Collapse Triangle Triangle


Collapse By Relative Length By Relative Length



Collapse Equilateral Triangle Equilateral Triangle




All Sides are Equal



Scalene Triangle



Isosceles Triangle


Collapse By Internal Angle By Internal Angle



Oblique > 90 Degree:Obtuse Angled Traingle



Oblique < 90 Degree:Acute Angled Traingle



Right Angled Triangle

but i want output structure like:

admin
------------------------|--------------------------
| |
user student

|
----------------------
| |

推荐答案

这里的主要错误是:所谓的家谱不能是一棵树(除非你忽略其中一个性别,因为它可能在某些历史中记忆树,主要基于邮件性别)。根据定义,树是没有周期的图形: http://en.wikipedia.org/wiki/ Tree_%28graph_theory%29 [ ^ ]。



家庭关系是一个更通用的结构图,一个有向图http://en.wikipedia.org/wiki/Directed_graph [ ^ ])因为通常顶点有两个父节点。它在关系中创建循环。



因此,层次结构,层次结构视图,树视图的概念不适用。实际上,您可以考虑将一些子图构建为树,并添加互补关系,以表示完整的图形。



现在,另一个问题是:您正在尝试将数据呈现与可视化演示和UI混合在一起。这是一个糟糕的方法。您应该开发一个纯粹的数据模型,与UI完全无关,并在其上创建一些与您的图形数据绑定的UI。



我希望这些笔记将帮助您检查整个方法,并提供更充分的模型和解决方案。不幸的是,Quick Questions& amp;答案论坛几乎不允许我们为您开发整个架构和设计;我们几乎没有资源。下一步应该是你的。



祝你好运。

-SA
The main mistake here is: so called "family tree" cannot be a tree (unless you ignore one of the sexes, as it probably was in some historical "memory trees", which was majorly based on the mail sex). Tree is, by definition, is a "graph without cycles": http://en.wikipedia.org/wiki/Tree_%28graph_theory%29[^].

Family relationship is a graph of more general structure, a directed graph (http://en.wikipedia.org/wiki/Directed_graph[^]) just because normally vertices have two parents. It creates cycles in the relationship.

Therefore, the concept of hierarchy, hierarchy view, tree view are not applicable. Actually, you could think of building some sub-graph as a tree, and add complementary relationship to it, to represent a full graph.

Now, another problem is: you are trying to mix up data presentation with visual presentation and UI. This is a bad approach. You should rather develop a pure data model, totally agnostic to UI, and, on top of it, create some UI bound with your graph data.

I hope these notes will help you to review your whole approach and come to more adequate model and solution. Unfortunately, the format of Quick Questions & Answers forum hardly allows us to develop the whole architecture and design for you; we hardly have resources for that. Next move should be yours.

Good luck.
—SA


检查这些



Asp.net中的树视图 [ ^ ](传销类型树)

动态创建二叉树以显示成员 [ ^ ]

使用Asp.Net绘制二叉树 [ ^ ]
Check these

Tree View in Asp.net[^](MLM type tree)
Creating dynamically Binary Tree to Display Member[^]
Draw a Binary Tree using Asp.Net[^]


看到这个.. :)



迭代器模式示例代码 - 族谱 [ ^ ]



Tree< t>:在C#中实现非二叉树 [ ^ ]



这些链接只是作为指导,你必须努力......:)
see this.. :)

Iterator Pattern Example Code—Family Tree[^]

Tree<t>: Implementing a Non-Binary Tree in C#[^]

those links are only for guidance, you have to work on that... :)


这篇关于如何使用asp.net c#构建族树?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆