请教一个生成树的算法 数据库是以下面格式存的,要把这些数据绑到treeview上,自己想的方法过于繁琐,请教下好的算法ID ParentID0 01 02 03 14 25 16 2...生成的树0 1 3 5 2 4 6... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先按parentid、id排序,然后从上往下添加即可。 选择节点后再去读取数据库建立下一级子节点这样连接太频繁,不可取,3楼能够稍微详细点吗,给个sql的例子 2种都有利弊,不是那种好那种坏,网页里的树都是去读取的,csdn左侧那树就是如此只读一次,然后都建好也不一定就好,如果数据很多的话 1.先把所有的ParentId读出来存到数组里面。2.读取全部数据。这样就不用一条记录读一次数据库了啊 因为你是无限极,如果是固定就2、3级,一次建完倒也无妨, web里也是div隐藏 protected void Page_Load(object sender, EventArgs e) { DataTable dt = GetData(0); //一级菜单,parentId 为0 表示一级菜单 for (int i = 0; i < dt.Rows.Count; i++) { TreeNode root = new TreeNode(); root.Text = dt.Rows[i]["id"].ToString(); root.Value = dt.Rows[i]["parentId"].ToString(); Treeview1.Nodes.Add(root); ////// AddNode(root); } } private void AddNode(TreeNode root) { DataTable dt=GetData(int.Parse (root.Text)); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { TreeNode node = new TreeNode(); node.Text = dt.Rows[i]["id"].ToString(); ;//parentId=0 node.Value = dt.Rows[i]["parentId"].ToString(); root.ChildNodes.Add(node); AddNode(node); } } } private DataTable GetData(int id ) { SqlConnection conn = new SqlConnection("database=test;uid=sa;pwd=sa;server=."); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from test where parentId=@id"; SqlParameter para = new SqlParameter(); para.ParameterName = "@id"; para.SqlDbType = SqlDbType.Int; para.Value = id; cmd.Parameters.Add(para); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataTable dt = new DataTable(); da.Fill(dt); return dt; }Treeview1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)有的代码你可以写在这个事件里面,代码我没有进行封装,你自己精简一下 从MemoryStream创建IMAGE对象时出现的参数无效? TreeView 四级联动的实现方法? 发现使用Xenocode\混淆后的程序 dagagrid 分辨率prob 一个动态库函数的传值错误 困绕我3天了 救命啊~~~~~~~~~~ GridView 关于axWebBrowser1.Navigate()参数的添加问题 Apriori算法的C#实现 窗体中的Opacity属性设置所引起的问题。 关于多维数组的问题 C# 编写代码生成器 怎么生成 sln 文件 保定数据到对象 垃圾还要自动回收 如何实现?
这样连接太频繁,不可取,3楼能够稍微详细点吗,给个sql的例子
只读一次,然后都建好也不一定就好,如果数据很多的话
2.读取全部数据。这样就不用一条记录读一次数据库了啊
{
DataTable dt = GetData(0);
//一级菜单,parentId 为0 表示一级菜单
for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode root = new TreeNode();
root.Text = dt.Rows[i]["id"].ToString();
root.Value = dt.Rows[i]["parentId"].ToString();
Treeview1.Nodes.Add(root);
//////
AddNode(root);
}
}
private void AddNode(TreeNode root)
{
DataTable dt=GetData(int.Parse (root.Text));
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode node = new TreeNode();
node.Text = dt.Rows[i]["id"].ToString(); ;//parentId=0
node.Value = dt.Rows[i]["parentId"].ToString();
root.ChildNodes.Add(node); AddNode(node);
}
}
} private DataTable GetData(int id )
{
SqlConnection conn = new SqlConnection("database=test;uid=sa;pwd=sa;server=.");
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from test where parentId=@id";
SqlParameter para = new SqlParameter();
para.ParameterName = "@id";
para.SqlDbType = SqlDbType.Int;
para.Value = id;
cmd.Parameters.Add(para);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
Treeview1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
有的代码你可以写在这个事件里面,代码我没有进行封装,你自己精简一下