日期:2014-05-17  浏览次数:20519 次

.net树状图显示问题!急!!!!!!!!!!!!!!!!
数据库有三个表 
零件表 NCMS_PARTS(OBJECT_ID 主键,PARTS_SN), 
NCMS_PRODUCT_STRUCT_RELATION(这个表就两个字段,PARENT_ID,CHILD_ID) ,
产品表 NCMS_PRODUCTS(OBJECT_ID 主键 ,PRODUCT_SN)

要求显示树状图。B/S页面。
求全部代码。。。

------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bindTreeView();
}
}
private void bindTreeView()
{
DataTable dt = new DataTable();
try
{
string str = "此处是连接你数据库的语句";
SqlConnection con = new SqlConnection();
con.ConnectionString = str;
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from table"; //此处是要从数据库取出的数据 根据你的情况 设定相应的查询语句
cmd.Connection = con;
SqlDataAdapter sqldap = new SqlDataAdapter();
sqldap.Fill(dt);
}
catch (Exception err)
{
throw new Exception(err.Message);
}
FirstItemFill(dt);
}
//此处是添加产品目录
private void FirstItemFill(DataTable dt)
{
TV.Nodes.Clear(); //TV是你添加的TreeView控件名
DataRow[] drs = dt.Select("ParentID=-1");
foreach (DataRow dr in drs)
{
TreeNode tNode = new TreeNode();
tNode.Text = dr["NodeName"].ToString();
tNode.Value = dr["ID"].ToString();

if (dr["IsLeaf"].ToString() == "0")
{
tNode.SelectAction = TreeNodeSelectAction.Expand;
}
else
{
tNode.SelectAction = TreeNodeSelectAction.SelectExpand;
}

TV.Nodes.Add(tNode);
DataRow[] childdrs = dt.Select("ParentID=" + dr["ID"].ToString());
//DataRow[] childdrs = dt.Select("ParentID=" + tNode.Value);
FillNextNode(tNode, childdrs, dt);
}
}

private void FillNextNode(TreeNode tNode, DataRow[] drs, DataTable dt)
{
foreach (DataRow dr in drs)
{
TreeNode cNode = new TreeNode();
cNode.Text = dr["NodeName"].ToString();
cNode.Value = dr["ID"].ToString();

if (dr["IsLeaf"].ToString() == "0") //islesf表示 是否是叶子节点
{
cNode.SelectAction = TreeNodeSelectAction.Expand;
}
else
{
cNode.SelectAction = TreeNodeSelectAction.SelectExpand;
}

tNode.ChildNodes.Add(cNode);
DataRow[] childdrs = dt.Select("ParentID=" + dr["ID"].ToString());
FillNextNode(cNode, childdrs, dt);
}
}
}

/*如果你不想修改绑定TreeView部分的代码 那么你就在数据库创建一个临时表 这个临时表 
包含 三个表的信息 并且 添加ParentID,IsLeaf,两个列 这两个列的值很好取 如果是产品 ParentID 取-1 isleaf 取-1
 如果是零件 则ParentID取0 isleaf取0 */

------解决方案--------------------
给个简单点的给你看
 TreeView TreeView1 = new TreeView();//实例化一个树状图
protected void Page_Load(object sender, EventArgs e)
{
TreeView1.SelectedNodeChanged +=