如何根据数据中的字段生成树
系统研发部开发1组
开发2组
开发3组
美工部
动画组
界面组
市场开拓部 --------------------编程问答-------------------- 递归 --------------------编程问答-------------------- 还有是怎样设计数据表比较好一点呢..有没具体的方法? --------------------编程问答-------------------- 只有两级?01
0101
02
0201
可以这样存ID --------------------编程问答-------------------- 是根据SQL字段生成TREEVIEW吗?
不好意思,刚才看见个树,习惯性打了个递归,因为最近有几个人都问我这个问题,有点神经质了。
如果你想问的就是这个,那么一般数据库里一个RowID为主键,一个PRowID是父节点的ID,PRowID默认为-1,-1就是代表根,PRowID对应的就是父节点的RowID
下面是代码,请简单修改数据库连接和树显示的内容就可以使用。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddTreeView(-1, (TreeNode)null);
}
}
protected void AddTreeView(Int64 ID, TreeNode tn)
{
SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MaterialDBConnectionString"].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();
} --------------------编程问答-------------------- 前段时间正好做了个的,再另一个帖子里也回过
复制过来给LZ好了:
做点简单的修改就能用
private void BindTree()
{
DataTable dt = 数据源; //自己去指定。。。
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID is null";
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv["Name"].ToString();
node.Value = drv["ID"].ToString();
node.ImageUrl = "~/images/folder.GIF";
node.Expanded = true;
this.tvRight.Nodes.Add(node);
AddReplies(dt,node);
}
}
//递归
private void AddReplies(DataTable dt, TreeNode node)
{
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID='" + node.Value + "'";
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row["Name"].ToString();
replyNode.Value = row["ID"].ToString();
replyNode.Expanded = false;
node.ChildNodes.Add(replyNode);
AddReplies(dt,replyNode);
}
} --------------------编程问答-------------------- 5楼的帮上大忙了
补充:.NET技术 , ASP.NET