关于TreeView控件使用一个只有高手才能解决的问题
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事件中 --------------------编程问答-------------------- 求求各位高手,我在线等 --------------------编程问答-------------------- stn.ChildNodes.Remove(tn);这里已经把tn去除了,而后面又多次用到了tn,好乱 --------------------编程问答-------------------- 那个remove又add的代码是我为了做实验用的 现在去掉 还是老样子 --------------------编程问答-------------------- 我觉得你的关键问题就是在没有添加之前的clear和remove,这些很危险,很容易导致索引混乱,耐心点调试吧,如果数据多,先弄个简单的调试
而且你的 index是在最早取得的,之后进行了各种操作,包括删除,那么最后,你AddAt时,这个 index指向的node还是你最原始的node吗 --------------------编程问答-------------------- 好乱啊 --------------------编程问答-------------------- 动态添加了节点,在点击其他节点或控件,导致了页面回传,
则回传后需重新再次添加一边上一次动态添加的节点,否则节点肯定回丢失
http://topic.csdn.net/u/20080919/13/e4c22124-4a52-4e92-a06f-9d353be196b9.html --------------------编程问答--------------------
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被选中的结构才会乱 --------------------编程问答-------------------- 怎么没人回帖了? 都吃饭去了?还是不屑? --------------------编程问答-------------------- 我只是来看高手怎么解决的 --------------------编程问答-------------------- 页面回传刷新了 --------------------编程问答-------------------- 代码拿走测试看看 --------------------编程问答-------------------- 程序改好了 就是不知道为什么,我把所有checked==true 的节点removed掉 然后在被展开节点(下面用n表示)重新赋完值以后再addAt进去就没事了 当然还有节点n 也被removed掉了,最后再重新addAt进去,问题就解决了 --------------------编程问答-------------------- 只是不知道为什么要这样做,页面回传TreeView控件不是有默认保存状态的么?
补充:.NET技术 , ASP.NET