杀了我吧!怎么可能不对?救我啊!

wuenming 2003-08-25 04:07:03
我做的树执行3次Treeview1_Collapse后就在下面多出内容,如下:
-提示
1121
ww
-sd
dlf
-1111
俄谔谔
执行第一次
Treeview1_Collapse
-提示
1121
ww
-sd
dlf
+1111
执行第二次
Treeview1_Collapse
-提示
1121
ww
+sd
+1111
执行第三次
Treeview1_Collapse
+提示
+sd
+1111
-提示
1121
ww
+sd
+1111
其中TreeView1.EnableViewState=false;
相关代码如下:
private void Page_Load(object sender, System.EventArgs e)
{

if (!this.IsPostBack)
{
readList();
ListBox1.Items[0].Selected=true;
reintiTree(Treeview1.Nodes,-1);
ViewState["ss"]="";
}
if(!IsPostBack)
{


DataTable dt=new DataTable();
DataColumn dc=new DataColumn("id",typeof(string));
dt.Columns.Add(new DataColumn("id",typeof(string)));
dc=new DataColumn("IsExpanded",typeof(bool));
dt.Columns.Add(dc);
dc=new DataColumn("IsSelected",typeof(bool));
dt.Columns.Add(dc);
saveAllNodeState(Treeview1.Nodes,dt);

}

}
private void reintiTree(Microsoft.Web.UI.WebControls.TreeNodeCollection Nds , int parentId)
{
string getid=ListBox1.SelectedItem.Value;
int tt;
tt=this.readHasnum();
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["sqlConnectString"]);
string myChooseQuery;
myChooseQuery = "SELECT * FROM GZB_CODE2 where VALID=1 and GCO1_ID="+getid;
SqlDataAdapter myCommand = new SqlDataAdapter(myChooseQuery,myConnection);
DataSet dsds=new DataSet();
myCommand.Fill(dsds,"table0");
DataView dv=new DataView() ;
Microsoft.Web.UI.WebControls.TreeNode tmpNd;
int strId;
dv.Table = dsds.Tables["table0"];
if(parentId==-1)
dv.RowFilter="IsNull(GCO2_ID,-1) = -1";
else
dv.RowFilter = "GCO2_ID='" + parentId+ "'";
foreach(DataRowView objRow in dv)
{
tmpNd=new Microsoft.Web.UI.WebControls.TreeNode();
strId=(int)objRow["ID"];
if(tt==0)
{
tmpNd.Text=objRow["DESCRIBE"].ToString();
tmpNd.ID=objRow["ID"].ToString();
}
if(tt==1)
{
string st=objRow["STD_CODE"].ToString()+objRow["DESCRIBE"].ToString();
tmpNd.Text=st.ToString();
tmpNd.ID=objRow["ID"].ToString();
}
Nds.Add(tmpNd);
reintiTree(Nds[Nds.Count-1].Nodes,strId);

}


}

private void TextBox1_TextChanged(object sender, System.EventArgs e)
{

}

private void Treeview1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
reintiTree(Treeview1.Nodes,-1);
DataTable dt1=new DataTable();
dt1=(System.Data.DataTable)ViewState["s"];
backAllNodeState(Treeview1.Nodes,dt1,2);
Treeview1.SelectedNodeIndex=e.Node;
Treeview1.GetNodeFromIndex(e.Node).Expanded=true;
DataTable dt=new DataTable();
DataColumn dc=new DataColumn("id",typeof(string));
dt.Columns.Add(dc);
dc=new DataColumn("IsExpanded",typeof(bool));
dt.Columns.Add(dc);
dc=new DataColumn("IsSelected",typeof(bool));
dt.Columns.Add(dc);
saveAllNodeState(Treeview1.Nodes,dt);
ViewState["ss"]=Treeview1.GetNodeFromIndex(Treeview1.SelectedNodeIndex).ID.ToString();
}

private void Treeview1_Collapse(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
reintiTree(Treeview1.Nodes,-1);
DataTable dt1=new DataTable();
dt1=(System.Data.DataTable)ViewState["s"];
backAllNodeState(Treeview1.Nodes,dt1,2);
Treeview1.SelectedNodeIndex=e.Node;
Treeview1.GetNodeFromIndex(e.Node).Expanded=false;
DataTable dt=new DataTable();
DataColumn dc=new DataColumn("id",typeof(string));
dt.Columns.Add(dc);
dc=new DataColumn("IsExpanded",typeof(bool));
dt.Columns.Add(dc);
dc=new DataColumn("IsSelected",typeof(bool));
dt.Columns.Add(dc);
saveAllNodeState(Treeview1.Nodes,dt);
ViewState["ss"]=Treeview1.GetNodeFromIndex(Treeview1.SelectedNodeIndex).ID.ToString();
bool rr=Treeview1.EnableViewState;

}

...全文
24 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuliqiufeng 2003-08-27
  • 打赏
  • 举报
回复
先用
TreeView1.Items.Clear()
清除
wuenming 2003-08-25
  • 打赏
  • 举报
回复
//遍历树并保存树的状态
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 mark)
{
foreach(TreeNode tn in tnc)
{

if(tn.Nodes.Count!=0)
{
backAllNodeState(tn.Nodes,dt,mark);
}
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;
}

}
}
}
}
wuenming 2003-08-25
  • 打赏
  • 举报
回复
就是将上一次执行后的树,重新加载了一次。

62,046

社区成员

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

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

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

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