//遍历树并保存树的状态
void saveAllNodeState(TreeNodeCollection tnc,DataTable dt)
{
foreach(TreeNode tn in tnc)
{
DataRow dr;
if(tn.Nodes.Count!=0)
{
saveAllNodeState(tn.Nodes,dt);
}
dr=dt.NewRow();
dr["id"]=tn.ID;
dr["IsExpanded"]=tn.Expanded;
dr["IsSelected"]=false;
if(Treeview1.GetNodeFromIndex(Treeview1.SelectedNodeIndex).ID==tn.ID)
dr["IsSelected"]=true;
dt.Rows.Add(dr);
ViewState["s"]=dt;
}
}
//遍历并还原树的状态

void backAllNodeState(TreeNodeCollection tnc,DataTable dt,int )
{
foreach(TreeNode tn in tnc)
{

if(tn.Nodes.Count!=0)
{
backAllNodeState(tn.Nodes,dt,);
}
DataRow dr1;
for(int i=0;i<dt.Rows.Count;i++)
{
dr1=dt.Rows[i];
if(dr1["id"].ToString()==tn.ID)
{
if((bool)dr1["IsExpanded"]==true)
{
tn.Expanded=true;
}

}
}
}
}