首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

.net树状图显示有关问题!

2012-10-29 
.net树状图显示问题!急!!!!!!!!!!!!!!!!数据库有三个表零件表 NCMS_PARTS(OBJECT_ID 主键,PARTS_SN),NCMS_

.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 += new EventHandler(TreeView1_SelectedNodeChanged);


form1.Controls.Add(TreeView1);//把TreeView1控件显示在页面上
TreeView1.ExpandDepth = 0;//树状图折叠
if (!IsPostBack)//写这样的 避免单击一次重复加载一次
{
string sql1 = "select distinct(DepartmentName) from Team ";
DBhelp db = new DBhelp();
try
{
DataTable dt1 = db.IndirectVisit(sql1, false);
foreach (DataRow item in dt1.Rows)
{
//先得到第一个节点
TreeView1.Nodes.Add(new TreeNode(item["DepartmentName"].ToString()));
}
for (int i = 0; i < TreeView1.Nodes.Count; i++)
{
string sql2 = "select TeamName from Team where DepartmentName=@DepartmentName";
SqlParameter arge = new SqlParameter("@DepartmentName", SqlDbType.NVarChar, 10);
arge.Value = TreeView1.Nodes[i].Text;//以第一节点的文字作为条件
DataTable dt2 = db.IndirectVisit(sql2, false, arge);
//在得到第一节点后面的子节点
foreach (DataRow item in dt2.Rows)
{
TreeView1.Nodes[i].ChildNodes.Add(new TreeNode(item["TeamName"].ToString()));

}
}

}
catch (Exception ex)
{
ClientScript.RegisterStartupScript(this.GetType(), "aaa", "<script>alert('" + ex.Message + "')</script>");
}
}

}

热点排行