从oracle读取数据生成树,怎样从数据库中读取数据生成树

privateDataSetds;privateSqlDataAdaptersqlDataAdapter1;privateintmaxnodeid;privatevoidForm1_Load(objectsender,System.EventArgse){stringstrconn=ConfigurationSettings.AppSettings["ConnStr"];sqlConnection1=newSqlConnection(strconn);this.sqlConnection1.Open();//填充DataSetthis.CreateDataSet();//从数据库中读取数据,通过递归生成树。InitTree(this.treeView1.Nodes,"0");}privatevoidCreateDataSet(){this.sqlDataAdapter1=newSqlDataAdapter("select*froms_menu",this.sqlConnection1);this.ds=newDataSet();this.sqlDataAdapter1.Fill(ds,"tree");}privatevoidInitTree(TreeNodeCollectionNds,stringparentId){DataViewdv=newDataView();TreeNodetmpNd;stringintId;dv.Table=ds.Tables["tree"];dv.RowFilter="ParentId='"+parentId+"'";foreach(DataRowViewdrvindv){tmpNd=newTreeNode();tmpNd.Tag=drv["NodeId"].ToString();tmpNd.Text=drv["NodeName"].ToString();Nds.Add(tmpNd);intId=drv["ParentId"].ToString();InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());}}//新增节点操作privatevoidinsert(stringtype){//判断是新增树节点,还是子节点.stringstrinsert="insertintos_menuvalues('{0}','{1}','{2}')";stringstrformat="";if(type=="sub")strformat=string.Format(strinsert,maxnodeid.ToString(),this.selectnode.Tag.ToString(),this.strcomm);elsestrformat=string.Format(strinsert,maxnodeid.ToString(),"0",this.strcomm);SqlCommandcmd=newSqlCommand(strformat,this.sqlConnection1);cmd.ExecuteNonQuery();}//为新增节点算出最大的节点值,并以此值作为新增的节点ID值privateintGetMaxNodeid(){intpre=0,last=0;DataSetmaxds=newDataSet();this.sqlDataAdapter1=newSqlDataAdapter("selectnodeidfroms_menuorderbynodeid",this.sqlConnection1);this.sqlDataAdapter1.Fill(maxds);for(inti=0;i{if(i+1{pre=int.Parse(maxds.Tables[0].Rows[i][0].ToString());last=int.Parse(maxds.Tables[0].Rows[i+1][0].ToString());if(last-pre!=1)returnpre+1;}}returnlast+1;}privatevoidgetallnode(TreeNodetn){foreach(TreeNodenodeintn.Nodes){list.Add(node.Tag.ToString());if(node.Nodes.Count>0){getallnode(node);}}}privatevoidtreeView1_MouseDown(objectsender,System.Windows.Forms.MouseEventArgse){//判断是否点击了某个节点this.selectnode=this.treeView1.GetNodeAt(e.X,e.Y);if(selectnode==null)this.isselected=false;elsethis.isselected=true;}privatevoidmenuAdd_Click(objectsender,System.EventArgse){//判断是否点击了某个节点,若没有点击了,则是新增一个树节点if(isselected==false){//算出新增树节点的ID值maxnodeid=GetMaxNodeid();TreeNodetmpNd=newTreeNode();//赋值tmpNd.Tag=this.maxnodeid.ToString();FormCommonfrmCommon=newFormCommon();DialogResultresult=frmCommon.ShowDialog();if(result==DialogResult.OK){//取到新增树节点的文本值tmpNd.Text=frmCommon.strcomm;this.strcomm=frmCommon.strcomm;//新增树节点this.treeView1.Nodes.Add(tmpNd);//插入数据库(说明插入的是树节点)this.insert("root");//展开this.selectnode.Expand();}}else{//判断是否点击了某个节点,若点击了,则是新增一个子节点this.contextAddSub();}}privatevoidcontextAddSub(){//得到新增子节点的ID值maxnodeid=GetMaxNodeid();TreeNodetmpNd=newTreeNode();//赋值tmpNd.Tag=this.maxnodeid.ToString();FormCommonfrmCommon=newFormCommon();DialogResultresult=frmCommon.ShowDialog();if(result==DialogResult.OK){//取到新增树节点的文本值tmpNd.Text=frmCommon.strcomm;this.strcomm=frmCommon.strcomm;//新增子节点this.selectnode.Nodes.Add(tmpNd);//插入数据库(说明插入的是子节点)this.insert("sub");//展开this.treeView1.SelectedNode.Expand();}}//删除节点操作privatevoidmenuDel_Click(objectsender,System.EventArgse){//新建一个ArrayList,用于保存要删除的节点下边的所有子节点list=newArrayList();if(this.isselected==true){//得到删除的节点下边的所

有子节点getallnode(this.selectnode);//把要删除的节点也加进去list.Add(this.selectnode.Tag.ToString());//循环从数据库中删除for(inti=0;i{stringstrdel="deletes_menuwherenodeid='{0}'";stringstrformat="";strformat=string.Format(strdel,list[i]);SqlCommandcmd=newSqlCommand(strformat,this.sqlConnection1);cmd.ExecuteNonQuery();}//从树中删除this.selectnode.Remove();}}//修改节点的值privatevoidmenuEdit_Click(objectsender,System.EventArgse){if(this.isselected==true){FormCommonfrmCommon=newFormCommon();DialogResultresult=frmCommon.ShowDialog();if(result==DialogResult.OK){stringstrdel="updates_menusetnodename='{1}'wherenodeid='{0}'";stringstrformat="";strformat=string.Format(strdel,this.selectnode.Tag.ToString(),frmCommon.strcomm);SqlCommandcmd=newSqlCommand(strformat,this.sqlConnection1);cmd.ExecuteNonQuery();this.selectnode.Text=frmCommon.strcomm;}}}//遍历所有节点.查找值privatevoidgetvaluenode(TreeNodeCollectiontn,stringvalue){foreach(TreeNodenodeintn){if(node.Nodes.Count>0){getvaluenode(node.Nodes,value);}if(node.Text==value)listnode.Add(node);}}privatevoidmenuSearch_Click(objectsender,System.EventArgse){intj,k;this.listnode=newArrayList();FormCommonfrmCommon=newFormCommon();DialogResultresult=frmCommon.ShowDialog();if(result==DialogResult.OK){TreeNoden=newTreeNode();TreeNodetemp=newTreeNode();//下面的函数是填充listnode;getvaluenode(this.treeView1.Nodes,frmCommon.strcomm);for(inti=0;i{j=0;k=0;n=(TreeNode)listnode[i];if(n!=null){temp=n;//得到上面结点的数量,并将数量保存到变量j;for(;n.Parent!=null;){n=n.Parent;j++;}//恢复原值n=temp;//新建一个树结点数组做保存得到查询到的所有节点.TreeNode[]m=newTreeNode[j];for(;n.Parent!=null;){n=n.Parent;m[k]=n;k++;}for(intp=0;pm[p].Expand();n=temp;n.ForeColor=Color.Red;}}}}privatevoidtreeView1_AfterLabelEdit(objectsender,System.Windows.Forms.NodeLabelEditEventArgse){if(this.treeView1.SelectedNode.Text!=null){stringstrdel="updates_menusetnodename='{1}'wherenodeid='{0}'";stringstrformat="";strformat=string.Format(strdel,this.treeView1.SelectedNode.Tag.ToString(),e.Label.ToString());SqlCommandcmd=newSqlCommand(strformat,this.sqlConnection1);cmd.ExecuteNonQuery();}}privatevoidtreeView1_AfterSelect(objectsender,System.Windows.Forms.TreeViewEventArgse){this.listBox1.Items.Clear();this.listBox1.Items.Add(this.treeView1.SelectedNode.FullPath.ToString());}}}

阅读全文 >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值