折腾了半个月了 跪求高手解决一下

SomethingJack 2011-09-02 09:59:50
希望高手能够递归的写出一段以GUID为主键的树形结构 能够动态删除 增加节点 拜托了 小弟解决不了了 不是INT类型!
数据库的表我暂时不提供 写出例子 我琢磨下!
...全文
221 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
风骑士之怒 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 somethingjack 的回复:]
引用 21 楼 wknight_it 的回复:

以上实例可以直接运行调试

还有你的动态添加删除,是什么样子的??

如果要在每个节点文本后面 跟 ‘添加’‘删除’,可以这样

将上面代码的
tn.Text = item["foldername"].ToString();
修改为
tn.Text = string.Format("{0} <a href=javascript……
[/Quote]
用了TreeView控件,不用控件的话,将那个递归里面涉及到TreeView的代码,替换成 格式字符串的等,你可以拼凑下HTML代码,然后前台用js美化
SomethingJack 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wknight_it 的回复:]

以上实例可以直接运行调试

还有你的动态添加删除,是什么样子的??

如果要在每个节点文本后面 跟 ‘添加’‘删除’,可以这样

将上面代码的
tn.Text = item["foldername"].ToString();
修改为
tn.Text = string.Format("{0} <a href=javascript:add('{1}')>添加</a> <a hre……
[/Quote]
对了 你这个是用了treeview控件的吧 如果不用控件呢?
SomethingJack 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wknight_it 的回复:]

以上实例可以直接运行调试

还有你的动态添加删除,是什么样子的??

如果要在每个节点文本后面 跟 ‘添加’‘删除’,可以这样

将上面代码的
tn.Text = item["foldername"].ToString();
修改为
tn.Text = string.Format("{0} <a href=javascript:add('{1}')>添加</a> <a hre……
[/Quote]
我指的添加删除就是当我选中根目录或者子节点的时候增加一个节点 或者删除 这个删除的时候可能是父节点 那子节点也要一并删除 - -量挺大的
SomethingJack 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wknight_it 的回复:]

以上实例可以直接运行调试

还有你的动态添加删除,是什么样子的??

如果要在每个节点文本后面 跟 ‘添加’‘删除’,可以这样

将上面代码的
tn.Text = item["foldername"].ToString();
修改为
tn.Text = string.Format("{0} <a href=javascript:add('{1}')>添加</a> <a hre……
[/Quote]

感谢 我现在就试试 !
风骑士之怒 2011-09-04
  • 打赏
  • 举报
回复
以上实例可以直接运行调试

还有你的动态添加删除,是什么样子的??

如果要在每个节点文本后面 跟 ‘添加’‘删除’,可以这样

将上面代码的
tn.Text = item["foldername"].ToString();
修改为
tn.Text = string.Format("{0} <a href=javascript:add('{1}')>添加</a> <a href=javascript:del('{1}')>删除</a>", item["foldername"].ToString(), item["folderid"].ToString());

即调用两个js方法,然后编写js方法,以ajax的方式来操作,后续操作你自己实践一下
风骑士之怒 2011-09-04
  • 打赏
  • 举报
回复

create table cate
(
folderid uniqueidentifier not null,
foldername nvarchar(80),
paretid uniqueidentifier
)

declare @a1 uniqueidentifier, @a2 uniqueidentifier, @a3 uniqueidentifier
set @a1 = NEWID()
set @a2 = NEWID()
set @a3 = NEWID()

insert into cate select @a1,' 部门1',null union all
select @a2,' 部门2',null union all
select @a3,' 部门3',null union all
select NEWID(),' 部门1-1',@a1 union all
select NEWID(),' 部门1-2',@a1 union all
select NEWID(),' 部门2-1',@a2 union all
select NEWID(),' 部门2-2',@a2 union all
select NEWID(),' 部门3-1',@a3 union all
select NEWID(),' 部门3-2',@a3



private DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dt = GetTree();
ForEachTree(null);
}
}

protected void ForEachTree(TreeNode prevNode)
{
DataView dv = dt.DefaultView;
dv.RowFilter = prevNode == null ? "paretid is null" : "paretid = '" + prevNode.Value + "'";
foreach (DataRowView item in dv)
{
TreeNode tn = new TreeNode();
tn.Text = item["foldername"].ToString();
tn.Value = item["folderid"].ToString();
if (prevNode == null)
{
TreeView1.Nodes.Add(tn);
}
else
{
prevNode.ChildNodes.Add(tn);
}
ForEachTree(tn);
}
}

protected DataTable GetTree()
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection("server=.;user id=sa;pwd=111;database=master;"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("select * from cate", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
return dt;
}
ajaxtop 2011-09-04
  • 打赏
  • 举报
回复
楼主,树当然对int比较敏感

可以用表结构把int和guid映射一下

这样也可以达到关联嘛
SomethingJack 2011-09-04
  • 打赏
  • 举报
回复
这个问题不该周末问- -
SomethingJack 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 dongxinxi 的回复:]

其他列一样的,多一个主键列罢了,主要是用整数查询起来快一点
[/Quote]

- - 你们谁做做好事 自己试一下贴代码我看看 字段暂时给你们folderid foldername paretid
2个ID都是GUID 类型 pID默认null(根节点)
  • 打赏
  • 举报
回复
其他列一样的,多一个主键列罢了,主要是用整数查询起来快一点
hwyqy 2011-09-04
  • 打赏
  • 举报
回复
周末一般人比较少,来帮楼主顶顶
Jdragon 2011-09-04
  • 打赏
  • 举报
回复
混点 来点分
highpr 2011-09-04
  • 打赏
  • 举报
回复
使用游标或者使用


while @rowcount!=0
内连接求子节点



具体我也忘记了
子夜__ 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taomanman 的回复:]

GUID为主键的树形结构???

表这样设计:
GUID NodeID PNodeID NodeContent NavigateUrl
只要使用NodeID和PNodeID进行递归不可以嘛,很多这样的例子嘛
[/Quote]
private void InitTree(TreeNodeCollection Nds,int parentid)
{
DataView dv = new DataView();
TreeNode tmpNd = null;
dv.Table = ds.Tables[0];
dv.RowFilter = String.Format("parentid={0}", parentid);
foreach (DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNd.Text = (string)drv["sortname"];//节点名称
tmpNd.NavigateUrl = String.Format("?id={0}", drv["id"]);//节点URL
//tmpNd.ImageUrl = ""; //节点图片
if (parentid == 0)
tmpNd.Expanded = true;
else
tmpNd.Expanded = false;
Nds.Add(tmpNd);
InitTree(Nds[Nds.Count - 1].ChildNodes, (int)drv["id"]);
}
}

参考
wth2010zz 2011-09-03
  • 打赏
  • 举报
回复
好 我竟然不知道!!1
油泼白菜 2011-09-03
  • 打赏
  • 举报
回复
做个标记,
SomethingJack 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zyloveyrf 的回复:]

递归实现treeview动态添加节点
C# code

protected void addtreview()
{
SqlConnection myconn = new SqlConnection();
myconn.ConnectionString = "server=.;database=baoming;uid=sa;pwd=admin";
……
[/Quote]
你这个还是INT类型吧?
todayclock 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 somethingjack 的回复:]
希望高手能够递归的写出一段以GUID为主键的树形结构 能够动态删除 增加节点 拜托了 小弟解决不了了 不是INT类型!
数据库的表我暂时不提供 写出例子 我琢磨下!
[/Quote]
主键是GUID类型的表,一般情况下都再增加个identity列。
  • 打赏
  • 举报
回复
只要使用NodeID和PNodeID进行递归就可以了。我的主键是就是用的guid
yuwentao4761901 2011-09-03
  • 打赏
  • 举报
回复
这个貌似和递归没多大关系的吧?实现起来也不难...
加载更多回复(5)

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧