IDictionary
<
string
,
bool
>
dic
=
new
Dictionary
<
string
,
bool
>
(
20
);
List
<
TreeNode
>
rightList, leftList;
//
= new List<TreeNode>();
private
void
Init()
{
TreeNode root
=
new
TreeNode(
"
aaa
"
,
"
1
"
);
dic.Add(root.Value,
true
);
TreeNode childNode
=
new
TreeNode(
"
aaaa
"
,
"
2
"
);
dic.Add(childNode.Value,
true
);
childNode.ChildNodes.Add(
new
TreeNode(
"
aaaaa
"
,
"
3
"
));
dic.Add(
"
3
"
,
true
);
root.ChildNodes.Add(childNode);
childNode
=
new
TreeNode(
"
aaab
"
,
"
4
"
);
dic.Add(childNode.Value,
true
);
root.ChildNodes.Add(childNode);
leftTv.Nodes.Add(root);
root
=
new
TreeNode(
"
bbb
"
,
"
5
"
);
dic.Add(root.Value,
true
);
childNode
=
new
TreeNode(
"
bbbb
"
,
"
6
"
);
dic.Add(childNode.Value,
true
);
root.ChildNodes.Add(childNode);
leftTv.Nodes.Add(root);
root
=
new
TreeNode(
"
ccc
"
,
"
7
"
);
dic.Add(root.Value,
true
);
leftTv.Nodes.Add(root);
ViewState[
"
dic
"
]
=
dic;
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(
!
IsPostBack)
{
Init();
}
else
{
dic
=
ViewState[
"
dic
"
]
as
IDictionary
<
string
,
bool
>
;
}
}
private
void
RecursionNode(TreeNode node, IList
<
TreeNode
>
list)
{
foreach
(TreeNode tn
in
node.ChildNodes)
{
list.Add(tn);
RecursionNode(tn, list);
}
}
protected
void
rightBtn_Click(
object
sender, EventArgs e)
{
TreeNode node;
if
((node
=
leftTv.SelectedNode)
!=
null
)
{
rightList
=
new
List
<
TreeNode
>
();
foreach
(TreeNode tn
in
rightTv.Nodes)
{
rightList.Add(tn);
RecursionNode(tn, rightList);
}
//
Add ParentNode
IList
<
TreeNode
>
list
=
new
List
<
TreeNode
>
();
while
(node.Parent
!=
null
)
{
node
=
node.Parent;
//
如果设置了其他属性的话,需要为其他属性赋值 或者使用深拷贝
list.Add(
new
TreeNode(node.Text, node.Value));
}
//
设置状态
//
RecursionAddNode(leftTv.SelectedNode, false);
if
(list.Count
>
0
)
{
TreeNode temp;
for
(
int
i
=
list.Count
-
1
; i
>
-
1
; i
--
)
{
if
(i
-
1
>
-
1
)
{
if
((temp
=
rightList.Find(n
=>
n.Value
==
list[i
-
1
].Value))
!=
null
)
{
list[i].ChildNodes.Add(temp);
}
else
{
list[i].ChildNodes.Add(list[i
-
1
]);
}
}
}
if
(rightList.Find(n
=>
n.Value
==
list[list.Count
-
1
].Value)
==
null
)
{
rightTv.Nodes.Add(list[list.Count
-
1
]);
}
if
((temp
=
rightList.Find(n
=>
n.Value
==
list[
0
].Value))
!=
null
)
{
if
(
!
rightList.Exists(n
=>
n.Value
==
leftTv.SelectedNode.Value))
{
temp.ChildNodes.Add(leftTv.SelectedNode);
}
else
{
new
TreeNode().ChildNodes.Add(leftTv.SelectedNode);
}
}
else
{
list[
0
].ChildNodes.Add(leftTv.SelectedNode);
}
}
else
{
if
(rightList.Find(n
=>
n.Value
==
leftTv.SelectedNode.Value)
==
null
)
{
rightTv.Nodes.Add(leftTv.SelectedNode);
}
else
{
leftTv.Nodes.Remove(leftTv.SelectedNode);
}
}
rightTv.ExpandAll();
}
}
protected
void
leftBtn_Click(
object
sender, EventArgs e)
{
TreeNode node;
if
((node
=
rightTv.SelectedNode)
!=
null
)
{
leftList
=
new
List
<
TreeNode
>
();
foreach
(TreeNode tn
in
leftTv.Nodes)
{
leftList.Add(tn);
RecursionNode(tn, leftList);
}
//
Add ParentNode
IList
<
TreeNode
>
list
=
new
List
<
TreeNode
>
();
while
(node.Parent
!=
null
)
{
node
=
node.Parent;
//
如果设置了其他属性的话,需要为其他属性赋值 或者使用深拷贝
list.Add(
new
TreeNode(node.Text, node.Value));
}
//
设置状态
//
RecursionAddNode(rightTv.SelectedNode, false);
if
(list.Count
>
0
)
{
TreeNode temp;
for
(
int
i
=
list.Count
-
1
; i
>
-
1
; i
--
)
{
if
(i
-
1
>
-
1
)
{
if
((temp
=
leftList.Find(n
=>
n.Value
==
list[i
-
1
].Value))
!=
null
)
{
list[i].ChildNodes.Add(temp);
}
else
{
list[i].ChildNodes.Add(list[i
-
1
]);
}
}
}
if
(leftList.Find(n
=>
n.Value
==
list[list.Count
-
1
].Value)
==
null
)
{
leftTv.Nodes.Add(list[list.Count
-
1
]);
}
if
((temp
=
leftList.Find(n
=>
n.Value
==
list[
0
].Value))
!=
null
)
{
if
(
!
leftList.Exists(n
=>
n.Value
==
rightTv.SelectedNode.Value))
{
temp.ChildNodes.Add(rightTv.SelectedNode);
}
else
{
new
TreeNode().ChildNodes.Add(rightTv.SelectedNode);
}
}
else
{
list[
0
].ChildNodes.Add(rightTv.SelectedNode);
}
}
else
{
if
(leftList.Find(n
=>
n.Value
==
rightTv.SelectedNode.Value)
==
null
)
{
leftTv.Nodes.Add(rightTv.SelectedNode);
}
else
{
rightTv.Nodes.Remove(rightTv.SelectedNode);
}
}
leftTv.ExpandAll();
}
}