关于TreeView控件使用一个只有高手才能解决的问题

lwbsleep 2012-05-08 10:58:12
TreeView 控件动态添加子节点以后,再展开其他节点,树结构就乱了。
代码如下:

TreeNode stn = tn.Parent;
TreeNode tno = stn.ChildNodes[0];

tn.ChildNodes.Clear();
int index = stn.ChildNodes.IndexOf(tn);

stn.ChildNodes.Remove(tn);
if (tn.Value != tno.Value)
{
stn.ChildNodes.Remove(tno);
}
commList = new OrgDal().getOrgsComm(" where station='" + tn.Value + "'");

for (int x = 0; x < commList.Count; x++)
{
if (commList[x].StationId == tn.Value)
{
TreeNode childnodeCom = new TreeNode();
childnodeCom.Text = commList[x].Orgname;
childnodeCom.Value = commList[x].Orgid;

childnodeCom.SelectAction = TreeNodeSelectAction.Select;
tn.ChildNodes.Add(childnodeCom);
}
}
if (tn.Value != tno.Value)
{
stn.ChildNodes.AddAt(0, tno);
}
stn.ChildNodes.AddAt(index, tn);

以上添加子节点代码添加在TreeNodeExpanded事件中
...全文
158 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwbsleep 2012-05-08
  • 打赏
  • 举报
回复


tn.ChildNodes.Clear();

commList = new OrgDal().getOrgsComm(" where station='" + tn.Value + "'");

for (int x = 0; x < commList.Count; x++)
{
if (commList[x].StationId == tn.Value)
{
TreeNode childnodeCom = new TreeNode();
childnodeCom.Text = commList[x].Orgname;
childnodeCom.Value = commList[x].Orgid;

childnodeCom.SelectAction = TreeNodeSelectAction.Select;
tn.ChildNodes.Add(childnodeCom);
}
}

现在代码简化成这样 还是不行,会不会是显示checkbaox的问题,因为只有checkbox被选中的结构才会乱
bonnibell 2012-05-08
  • 打赏
  • 举报
回复
动态添加了节点,在点击其他节点或控件,导致了页面回传,

则回传后需重新再次添加一边上一次动态添加的节点,否则节点肯定回丢失

http://topic.csdn.net/u/20080919/13/e4c22124-4a52-4e92-a06f-9d353be196b9.html
lqkankan 2012-05-08
  • 打赏
  • 举报
回复
好乱啊
bdmh 2012-05-08
  • 打赏
  • 举报
回复
我觉得你的关键问题就是在没有添加之前的clear和remove,这些很危险,很容易导致索引混乱,耐心点调试吧,如果数据多,先弄个简单的调试
而且你的 index是在最早取得的,之后进行了各种操作,包括删除,那么最后,你AddAt时,这个 index指向的node还是你最原始的node吗
lwbsleep 2012-05-08
  • 打赏
  • 举报
回复
那个remove又add的代码是我为了做实验用的 现在去掉 还是老样子
bdmh 2012-05-08
  • 打赏
  • 举报
回复
stn.ChildNodes.Remove(tn);这里已经把tn去除了,而后面又多次用到了tn,好乱
lwbsleep 2012-05-08
  • 打赏
  • 举报
回复
求求各位高手,我在线等
lwbsleep 2012-05-08
  • 打赏
  • 举报
回复
只是不知道为什么要这样做,页面回传TreeView控件不是有默认保存状态的么?
lwbsleep 2012-05-08
  • 打赏
  • 举报
回复
程序改好了 就是不知道为什么,我把所有checked==true 的节点removed掉 然后在被展开节点(下面用n表示)重新赋完值以后再addAt进去就没事了 当然还有节点n 也被removed掉了,最后再重新addAt进去,问题就解决了
区块兔观察 2012-05-08
  • 打赏
  • 举报
回复
代码拿走测试看看
zhangdaowu5 2012-05-08
  • 打赏
  • 举报
回复
页面回传刷新了
骑猪看海 2012-05-08
  • 打赏
  • 举报
回复
我只是来看高手怎么解决的
lwbsleep 2012-05-08
  • 打赏
  • 举报
回复
怎么没人回帖了? 都吃饭去了?还是不屑?

62,267

社区成员

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

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

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

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