怎么删除TreeView节点?

zsxghost 2008-03-20 05:14:52
现在有一棵树(TreeView),一个DataTable,
DataTable里放的是这棵树里的几个特定节点的ID(TreeNode.Value)。

现在要删除这棵树里部分节点。要保留的节点为DataTable里的节点、其所有子孙节点、父节点及祖先节点。

求C#算法。
...全文
214 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsxghost 2008-03-29
  • 打赏
  • 举报
回复
终于有例子了
fanliang11 2008-03-24
  • 打赏
  • 举报
回复
只贴下删除节点和添加节点的代码..其它的代码不好透露..查找父节点的 ValuePath
tmpParentNade = TreeView1.FindNode(tmpNd.Parent.ValuePath) 这样就能查找到当前节点

Protected Sub RadMenu1_ItemClick(ByVal sender As Object, ByVal e As Telerik.WebControls.RadMenuEventArgs) Handles RadMenu10.ItemClick
Dim tmpNd As TreeNode, tmpTreeNode As TreeNode, tmpParentNade As TreeNode = Nothing
Dim tempNode As TreeNode
tmpNd = TreeView1.FindNode(TxtSelectNode.Text)
If tmpNd Is Nothing Then
Exit Sub
End If
Dim htBase As New Hashtable
Dim htMaterialList As New Hashtable
Dim strValue() As String, strtmp As String = ""

Dim tmpid As Long

If e.Item.Text = "添加" Then
tmpTreeNode = New TreeNode("新节点")

strValue = tmpNd.Value.Split("|")
With New CatalogTask
tmpid = .AddChild("新节点" & (tmpNd.ChildNodes.Count + 1).ToString(), strValue(1), 1)
End With
tmpTreeNode.Value = "000|" & tmpid.ToString
tmpTreeNode.NavigateUrl = "#&menuNodeID=" & tmpid.ToString
tmpTreeNode.ImageUrl = ""
tmpTreeNode.Expanded = True
tmpNd.ChildNodes.Add(tmpTreeNode)

tmpTreeNode.Text = "新节点" + tmpNd.ChildNodes.Count.ToString()
SetNodeText(tmpNd.ChildNodes(tmpNd.ChildNodes.IndexOf(tmpTreeNode)))
tmpNd.Selected = True


ElseIf e.Item.Text = "删除" Then
tmpParentNade = TreeView1.FindNode(tmpNd.Parent.ValuePath)
tmpParentNade.ChildNodes.RemoveAt(tmpParentNade.ChildNodes.IndexOf(tmpNd))

strValue = tmpNd.Value.Split("|")
With New CatalogTask
tmpid = .DeleteByLayerID(strValue(1))
End With
End If

End Sub

zsxghost 2008-03-24
  • 打赏
  • 举报
回复
蒙了,看不懂。对VB不熟。另外,14楼,DataTable里存储的是节点的ID。没有结构。如果有树结构,那就可以直接输出了。
一品梅 2008-03-23
  • 打赏
  • 举报
回复
datatable存储树结构?
fanliang11 2008-03-23
  • 打赏
  • 举报
回复
你的思路有错误..我最近正好做了TreeView 删除,前插,后插.添加节点,上移,下移,还是无刷新的..明天回公司找下代码..贴上..没办法..客户要求变态..
Nick_y 2008-03-22
  • 打赏
  • 举报
回复
路过`学习....
zsxghost 2008-03-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 growleaf 的回复:]
public void DeleteNodeNotInTable(TreeNode objTreeNode)
{
if (objTreeNode == null) return;

if (objTreeNode.Nodes.Count <= 0)
{
//判断当前节点的ID是否在DATATABLE中,如果不在则删除

if (/*不再DATATABLE中*/true)
{
// 删除该节点
}

[/Quote]
我也是这么想的,怎么在一个节点里面删除本事?

老大

我在他的父节点都删不掉,我在遍历,不让删。
lovehongyun 2008-03-21
  • 打赏
  • 举报
回复
遍历treeview的数据源,和你的datatable(要保留的)里的节点比,没有的删掉..
狂奔的蜗牛h 2008-03-21
  • 打赏
  • 举报
回复
将DataTable里面的节点重新绑定到TreeView
zsxghost 2008-03-21
  • 打赏
  • 举报
回复
不灵
growleaf 2008-03-21
  • 打赏
  • 举报
回复
public void DeleteNodeNotInTable(TreeNode objTreeNode)
{
if (objTreeNode == null) return;

if (objTreeNode.Nodes.Count <= 0)
{
//判断当前节点的ID是否在DATATABLE中,如果不在则删除

if (/*不再DATATABLE中*/true)
{
// 删除该节点
}
return;
}

while(objTreeNode.Nodes[i]) > 0)
{
DeleteNodeNotInTable(objTreeNode.Nodes[i]);
}

//判断objTreeNode的ID是否在DATATABLE中

if (/*不再DATATABLE中*/true)
{
// 删除该节点
}
}
lishijie910123 2008-03-20
  • 打赏
  • 举报
回复
lz试试楼上的方法,在看看
zsxghost 2008-03-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 growleaf 的回复:]
你的部分节点指的是什么意思,这个部分节点的子节点的ID是否也包含在DataTable中,或则仅是一些无关的数据呢??
不过你可以用递归来实现,

如:
public void DeleteNodeNotInTable(TreeNode objTreeNode)
{
if (objTreeNode == null) return;

if (objTreeNode.Nodes.Count <= 0)
{
//判断当前节点的ID是否在DATATABLE中,如果不在则…
[/Quote]

我用的也是递归方法,可是我这遍历一个节点的子节点时遇到这样的问题
foreach(TreeNode CTN in PTN.ChildNodes)
{
判断,删除节点。(这里删不掉,原因是:节点可能被删除,不能再循环)
}

我没有用你的方法试,但是如果删除节点,那么那个for循环的条件就变了,那个objTreeNode.Nodes[i]的就不知道是哪个节点了。
不知道能不能明白我所说的。
growleaf 2008-03-20
  • 打赏
  • 举报
回复
你的部分节点指的是什么意思,这个部分节点的子节点的ID是否也包含在DataTable中,或则仅是一些无关的数据呢??
不过你可以用递归来实现,

如:
public void DeleteNodeNotInTable(TreeNode objTreeNode)
{
if (objTreeNode == null) return;

if (objTreeNode.Nodes.Count <= 0)
{
//判断当前节点的ID是否在DATATABLE中,如果不在则删除

if (/*不再DATATABLE中*/true)
{
// 删除数据
}
return;
}

for (int i = 0; i < objTreeNode.Nodes.Count; i++)
{
DeleteNodeNotInTable(objTreeNode.Nodes[i]);
}

//判断objTreeNode的ID是否在DATATABLE中

if (/*不再DATATABLE中*/true)
{
// 删除数据
}
}

我没有做测试,你可以试试看,我也不知道有没有问题,给你提供一个思路~~~
xupeihuagudulei 2008-03-20
  • 打赏
  • 举报
回复
路过
顶你

  • 打赏
  • 举报
回复
学习

62,041

社区成员

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

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

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

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