TreeView删除节点问题,在线等.解决后立马结贴

findy_Net 2008-03-19 12:00:37
我把A类下的aa移到B类下后..在B类下已经增加了.但我要把A类下的aa给删除
应该怎么处理.

void CustomerFullSDODCForm_OnSaveBatchCargo(object sender, E2ETEventArgs<DataCollection<CargoFullSDO>> e)
{
DataCollection<CargoFullSDO> cargos = e.Data;

//修改后的集合
foreach (CargoFullSDO var in cargos)
{
//找到父节点,
TreeNode parentNode = FindCategoryNode(treeView_Cargo, var);
if (parentNode != null)
{
TreeNode categoryNode = FindCargoCategory(parentNode, var);
//父结点下所有子结点
TreeNode currentNode = FindNode(parentNode, var);
if (categoryNode== null)
{

//新增的
if (currentNode == null)
{
TreeNode node = new TreeNode();
node.Text = var.CargoName;
node.Tag = var;
parentNode.Nodes.Add(node);
}
//原先或修改的
else
{
currentNode.Text = var.CargoName;
currentNode.Tag = var;
}
}
else
{
//新增的
if (currentNode == null)
{
TreeNode node = new TreeNode();
node.Text = var.CargoName;
node.Tag = var;
parentNode.Nodes.Add(node);

}
//原先或修改的
else
{
currentNode.Text = var.CargoName;
currentNode.Tag = var;
//这里是修改后的节点.如果此时修改了它的类型.它就已经移到另个类别下去了
现在我要把本来这个节点给删除..(因为要求不能让treeview刷新,所以才能删除来实现同步如果刷新一遍的话它在这个类别下面其实不存在的)

}
}
}
}
}

各位大虾帮帮忙啊.解决后立马结贴..在线等............
...全文
82 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangping_li 2008-03-20
  • 打赏
  • 举报
回复

void CustomerFullSDODCForm_OnSaveBatchCargo(object sender, E2ETEventArgs<DataCollection<CargoFullSDO>> e)
{
DataCollection<CargoFullSDO> cargos = e.Data;

//修改后的集合
foreach (CargoFullSDO var in cargos)
{
//找到父节点,
TreeNode parentNode = FindCategoryNode(treeView_Cargo, var);
if (parentNode != null)
{
//父结点下所有子结点
TreeNode currentNode = FindNode(parentNode, var);
//新增的或者修改类别的
if (currentNode == null)
{
//去掉旧结点
TreeNode oleNode = FindCargoOleNode(treeView_Cargo, var);
if (oleNode != null)
{
oleNode.Remove();
}
//增加新结点
TreeNode node = new TreeNode();
node.Text = var.CargoName;
node.Tag = var;
parentNode.Nodes.Add(node);
}
//原先或修改其它的
else
{
currentNode.Text = var.CargoName;
currentNode.Tag = var;
}

}
}
}
//根据修改货物的ID查找原来的结点
TreeNode FindCargoOleNode(TreeView view, CargoFullSDO cargo)
{
TreeNode cargoNode = null;
TreeNodeCollection nodes = view.Nodes;
foreach (TreeNode var in nodes)
{
CargoFullSDO oleNode = null;
TreeNodeCollection cNodes = var.Nodes;
foreach (TreeNode temp in cNodes)
{
if (temp.Tag is CargoFullSDO)
{
oleNode = temp.Tag as CargoFullSDO;
if (cargo.CargoId == oleNode.CargoId)
{
cargoNode = temp;
break;
}

}
}

}
return cargoNode;
}
findy_Net 2008-03-20
  • 打赏
  • 举报
回复
楼上的兄弟..我是把值存在缓存中的.不能直接与数据库交互...数据量大时.性能不高
问题已解决..谢谢楼上的解答
qfgyd2004 2008-03-19
  • 打赏
  • 举报
回复
Tv1.Nodes.Remove(node);
purple_tide 2008-03-19
  • 打赏
  • 举报
回复
直接把aa的父亲节点设置为B 就可以了

一个节点只能有一个父节点 所以移动以后原来隶属于A的关系会被删除
不要用Clone等方法
chengqscjh 2008-03-19
  • 打赏
  • 举报
回复
现在我要把本来这个节点给删除..(因为要求不能让treeview刷新,所以才能删除来实现同步如果刷新一遍的话它在这个类别下面其实不存在的
-------------------------
采用ajax来构建树.要实现同步刷新



我把A类下的aa移到B类下后..在B类下已经增加了.但我要把A类下的aa给删除
-----------------------------------
移动按钮事件写
1找到aa将其添加到B
2.以aa为变量,到数据库去删除这条与A的关系
3.主要是两个函数,添加和删除两个函数
majicool 2008-03-19
  • 打赏
  • 举报
回复
好像以前也看到过 忘了。。。关注
findy_Net 2008-03-19
  • 打赏
  • 举报
回复
TO 1楼:
其实此时aa的父节点已经为B了.TreeView呈现出来的只是一个假象的数据.如果刷新TreeView的话.结果是正确的.
但是现在前提是不能刷新TreeView..所以还得把A下面这个假象的aa给删除掉.谢谢
TO 2楼
这个方法是不行的.最开先就试过了.谢谢.

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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