我想用一个treeview显示一个树形结构,数据是动态绑定的,
结点的结构是0--根结点,00--0的子结点,01--0的子结点,001--00的子结点,如下所示
|-0
|--00
|----001
问题是只能生成到2层的结点,第3层的结点不能生成,如果用递归调用的话就有错误(集合已修改;可能无法执行枚举操作。 ),我觉得问题的关键是我不知道如何获得该treeview的所有结点集合.请各位高手指教!用其他的方法(如用xml等做)也行,麻烦写点示例代码.
代码如下:
public void bindTreeNode(DataSet tempds,TreeNodeCollection mynodes)
{
ArrayList org=new ArrayList();
for (int i = 0; i < tempds.Tables["tb"].Rows.Count; i++)
{
org.Add(new OrgNode(tempds.Tables["tb"].Rows["Org_num"].ToString(), tempds.Tables["tb"].Rows["Org_Name"].ToString()));
}
foreach(OrgNode tempNode in org)
{
if(tempNode.ID=="0")
trvOrg.Nodes.Add(tempNode);
foreach (OrgNode tn in mynodes)///如果用递归则出问题在这里(集合已修改;可能无法执行枚举操作。 ) {
if ((tempNode.ID.Length - tn.ID.Length) == 1)
{
if (tn.ID == tempNode.ID.Substring(0, tn.ID.Length))
tn.ChildNodes.Add(tempNode);
//bindTreeNode(tempds,tn.ChildNodes);///递归调用///????????????????????????????????? }
}
}
}
注:OrgNode是TreeNode的子类
结点的结构是0--根结点,00--0的子结点,01--0的子结点,001--00的子结点,如下所示
|-0
|--00
|----001
问题是只能生成到2层的结点,第3层的结点不能生成,如果用递归调用的话就有错误(集合已修改;可能无法执行枚举操作。 ),我觉得问题的关键是我不知道如何获得该treeview的所有结点集合.请各位高手指教!用其他的方法(如用xml等做)也行,麻烦写点示例代码.
代码如下:
public void bindTreeNode(DataSet tempds,TreeNodeCollection mynodes)
{
ArrayList org=new ArrayList();
for (int i = 0; i < tempds.Tables["tb"].Rows.Count; i++)
{
org.Add(new OrgNode(tempds.Tables["tb"].Rows["Org_num"].ToString(), tempds.Tables["tb"].Rows["Org_Name"].ToString()));
}
foreach(OrgNode tempNode in org)
{
if(tempNode.ID=="0")
trvOrg.Nodes.Add(tempNode);
foreach (OrgNode tn in mynodes)///如果用递归则出问题在这里(集合已修改;可能无法执行枚举操作。 ) {
if ((tempNode.ID.Length - tn.ID.Length) == 1)
{
if (tn.ID == tempNode.ID.Substring(0, tn.ID.Length))
tn.ChildNodes.Add(tempNode);
//bindTreeNode(tempds,tn.ChildNodes);///递归调用///????????????????????????????????? }
}
}
}
注:OrgNode是TreeNode的子类
解决方案 »
- 文字渐进渐出的效果
- IP地址转为二进制紧凑模式,代码怎么写,急,100分在线等!!!!
- 我写的MSSQL2000的数据库连接总是提示我超出了连接最大数,如何修改可以避免。
- 提交更新数据的区别
- 我用ds.Tables["dangqi"].Compute("sum(money1)","").ToString();计算合计列,怎样放在页脚里?谢!
- gridview新增问题 asp.net
- 在字符串中判断是否含有数字,
- bll?
- 后置代码中事件与方法的区别??
- 谁能提供一些关于Arcgis方面的资料
- 正由另一进程使用,因此该进程无法访问该文件的
- excel.ActiveWorkbook.SaveAs()的13个参数该怎么弄啊?
{
DataView dvw = new DataView();
TreeNode nodTemp; string strTxt = "SELECT * FROM table WHERE ParentNum='" + sParentID + "' ";
DataSet ds = sqldata.GetDS(strTxt);
dvw.Table = ds.Tables[0];
foreach (DataRowView drv in dvw)
{
nodTemp = new TreeNode();
nodTemp.Value = drv["ID"].ToString();
nodTemp.Text = drv["Name"].ToString();
nodTemp.ToolTip = drv["XZQH"].ToString();
tncCurrent.Add(nodTemp);
InitNavigationTree(nodTemp.ChildNodes, nodTemp.Value);
} }
{
Node newNode = new Node();
newNode.Tag = Convert.ToString(dsWorkName.Tables["tb"].Rows[i]["Org_num"]);
newNode.Text = Convert.ToString(dsWorkName.Tables["tb"].Rows[i]["Org_Name"]); Node node = utreeTask.Find(newNode.Tag.ToString().Substring(newNode.Tag.ToString().Length-1));
if (node !=null)
{
node.Nodes.Add(newNode);
}
else
{
org.Nodes.Add(newNode);
}
}
org.ExpandAll();
for (int i = 0; i < tempds.Tables["tb"].Rows.Count; i++)
{
TreeNode newNode = new TreeNode();
newNode.Value = Convert.ToString(tempds.Tables["tb"].Rows[i]["Org_num"]);
newNode.Text = Convert.ToString(tempds.Tables["tb"].Rows[i]["Org_Name"]); TreeNode node = trvOrg.FindNode(newNode.Value.ToString().Substring(newNode.Value.ToString().Length - 1));
if (node != null)
{
node.ChildNodes.Add(newNode);
}
else
{
trvOrg.Nodes.Add(newNode);
}
}
trvOrg.ExpandAll();
for (int i = 0; i < tempds.Tables["tb"].Rows.Count; i++)
{
TreeNode newNode = new TreeNode();
newNode.Value = Convert.ToString(tempds.Tables["tb"].Rows[i]["Org_num"]);
newNode.Text = Convert.ToString(tempds.Tables["tb"].Rows[i]["Org_Name"]); TreeNode node = trvOrg.FindNode(newNode.Value.ToString().Substring(0,newNode.Value.ToString().Length - 1));
if (node != null)
{
node.ChildNodes.Add(newNode);
}
else
{
trvOrg.Nodes.Add(newNode);
}
}
trvOrg.ExpandAll();
private void dispTree(int id)
{
string sql = "select * from _IB";
DataSet dt = DAL.DbHelperSQL.Query(sql);
ArrayList arr = new ArrayList();
TreeNode[] nodes=new TreeNode[dt.Tables[0].Rows.Count];
for (int i = 0; i < dt.Tables[0].Rows.Count; i++)
{
arr.Add(dt.Tables[0].Rows[i]["IB_ID"].ToString());
nodes[i] = new TreeNode();
nodes[i].Text = dt.Tables[0].Rows[i]["IB_Name"].ToString();
if (dt.Tables[0].Rows[i]["IB_class"].ToString() != "0")
{
int fartherid = arr.LastIndexOf(dt.Tables[0].Rows[i]["IB_class"].ToString());
nodes[fartherid].ChildNodes.Add(nodes[i]);
}
else
{
TreeView1.Nodes.Add(nodes[i]);
}
}
}