ext.net TreePanel 无刷新增删改操作

最近做项目时遇到了TreePanel的无刷新问题。模块的要求是在为某个节点增加子节点的时候,要无刷新的添加进去,并保持此节点的展开状态。删除以及修改操作也一样。

我的处理方法是:在点击相关按钮后,比如点击添加按钮,先执行ajax方法在后台把信息添加至数据库,然后在前端判断方法是否成功,成功的话用js在树中添加相应节点。

废话不多说了,直接把代码奉献给大家

一:前端代码如下:

<head runat="server">     <title></title>    

<script type="text/javascript">        

     function TreeNode_Click(node) {          

   Ext.net.DirectMethods.LoadData(node.id);      

   }

        function TreePanel_Click(node)

  {          

    txtPCatalogName.setValue(node.text);           

  hidPCatalogID.setValue(node.id);      

      }

       var save = function()

  {       

        Ext.net.DirectMethods.saveCatory({ success: function(result) {       

           if (result == true) {               

           var catoryID = hidCatalogID.getValue();              

            var catorytext = txtCatalogName.getValue();    

                  Append(catoryID, catorytext);         

         }       

    }       

    });       

    }

        var Append = function(nodeid, nodetext) {            

    var PCatoryId = hidPCatalogID.getValue();         

        var PNode = tplMain.getNodeById(PCatoryId);      

           var action = hidAction.getValue();            

            var NewNode = new Ext.tree.TreeNode({        

           id: nodeid,               

       text: nodetext,               

       icon: "images/left_data.gif",           

               listeners: {//监听   

                   "click": function(node, e) {                 

                               Ext.net.DirectMethods.LoadData(node.id);               

                 }   

              }

            });  

           if (action == "0") {

                PNode.appendChild(NewNode);           

                 hidAction.setValue("1");           

      }       

      else {                

       var catoryId = hidCatalogID.getValue();               

        var node = tplMain.getNodeById(catoryId);      

               PNode.replaceChild(NewNode, node);         

           }

        }

        var DeleteCatory = function() {           

          Ext.net.DirectMethods.DeleteCatory({ success: function(result) {             

                      if (result == true) {                    

                       var CatoryId = hidcurrentCataryID.getValue();          

                             var node = tplMain.getNodeById(CatoryId);                  

                        if (node != null) {                         node.remove();                   

                        }             

              }         

          }  

             });

        }

    </script>

</head>

<body>    

<form id="form1" runat="server">     

<ext:Hidden ID="hidPCatalogID" runat="server"></ext:Hidden>   

<ext:Hidden ID="hidOrgID" runat="server"></ext:Hidden>   

<ext:Hidden ID="hidCatalogID" runat="server"></ext:Hidden>  

  <ext:Hidden ID="hidcurrentCataryID" runat="server"></ext:Hidden>  

  <ext:Hidden ID="hidPCurrentCataryID" runat="server"></ext:Hidden>

   <ext:Hidden ID="hidAction" runat="server"></ext:Hidden>

<ext:ViewPort ID="ViewPort1" runat="server">        

<Content>            

<ext:BorderLayout ID="BorderLayout1" runat="server">             

    <West Collapsible="true" Split="true"                  MarginsSummary="5 0 5 2">    

      <ext:TreePanel ID="tplMain" runat="server" Height="500" Width="350" UseArrows="true"  AutoScroll="true" Animate="true" EnableDD="true" ContainerScroll="true"> <Listeners> <Click Handler="TreeNode_Click(node);" /> </Listeners> </ext:TreePanel>                 </West>            

     <Center MarginsSummary="5 0 5 1">           

      <ext:FormPanel ID="FormPanel1" runat="server" Title="Form Panel" Padding="5" ButtonAlign="Right">                     

        <Items>     

   <ext:TextField ID="lblCatalogID" runat="server" AnchorHorizontal="60%" FieldLabel="分类编号"> </ext:TextField>       

      <ext:TextField ID="txtCatalogName" runat="server" AnchorHorizontal="60%" FieldLabel="分类名称">      </ext:TextField>                        <ext:TextArea ID="txtDesc" runat="server" AnchorHorizontal="60%" FieldLabel="分类描述">    </ext:TextArea>              

 <ext:TextField ID="txtPCatalogName" runat="server" AnchorHorizontal="60%" FieldLabel="上级分类">              

   <Listeners><Focus Handler="SelectPCatalog();" /></Listeners>   </ext:TextField>       

 <ext:TextField ID="txtSortID" runat="server" AnchorHorizontal="60%" FieldLabel="分类排序ID"> </ext:TextField>                             <ext:TextField ID="txt1" runat="server"></ext:TextField></Items>           

 <Buttons>                                 

<ext:Button ID="btnAdd" runat="server" Text="添加" Icon="Add"> <DirectEvents><Click OnEvent="BtnAdd_Click"></Click></DirectEvents>

</ext:Button>                                 

  <ext:Button ID="btnSave" runat="server" Text="保存" Icon="Accept">  <Listeners><Click Fn="save" /></Listeners>                                   </ext:Button>                                                                    

<ext:Button ID="btnDel" runat="server" Text="删除" Icon="Delete"> <Listeners><Click Fn="DeleteCatory" /></Listeners>  </ext:Button> </Buttons>   </ext:FormPanel>  </Center>   </ext:BorderLayout>        

  <ext:Window ID="winCatalog" Hidden="true" Title="选择上级分类" runat="server" X=500 Y=20 Height=500 Width=300 ButtonAlign=Center>                 <Content>   <uc1:ctrcatalogtree id="ct_1" runat="server"/>  </Content>  <Buttons>  <ext:Button ID="Button1" runat="server" Text="确定" Icon="Accept"><Listeners><Click Handler="#{winCatalog}.hide();" /></Listeners></ext:Button>   </Buttons>             </ext:Window></Content>     </ext:ViewPort></form> </body> </html>

--以上是前端代码,由于每个公司的编程模式不一样,大家只做参考。增删改的操作的主要方法在save跟deletecatory方法当中。

 

下面贴出部分后台方法:

 [DirectMethod]     public string Submit()   //原本是想通过此方法返回树的json数据局,然后重新绑定,但是会刷新无法把状态展开,所以弃用

  {

        Ext.Net.TreeNodeCollection nodes = InitTreePanel();      

   return nodes.ToJson();

    }        

private Ext.Net.TreeNodeCollection InitTreePanel()      

   {            

long lngRootID = 1;

            if (System.Configuration.ConfigurationSettings.AppSettings["SystemModel"] == "1")         

    {                 //如果是租用的方式,只显示所在机构一层的部门树            

     lngRootID = long.Parse(Session["UserOrgID"].ToString());             }

            if (Session["OldCatalogID"] != null)         

    {                

     lngCurrCatalogID = long.Parse(Session["OldCatalogID"].ToString());   

      }  

           OCatalogCollection cc = CatalogControl.GetAllCatalogCollection();       

      Ext.Net.TreeNode root = new Ext.Net.TreeNode();           

  if (cc.GetOCatalog(lngRootID) != null) //如果还没有为该机构添加根分类,则提示。     

        {                

       root.Text = cc.GetOCatalog(lngRootID).Name;           

  }        

     else           

  {             

    Response.Write("<script>alert('对不起还没有添加根分类,请联系管理员!');</script>");      

           return null;           

  }            

root.NodeID = lngRootID.ToString();         

    root.IconFile = @"..\Images\catalog.ico";          

   root.Expanded = true;             //root.Expanded = false;           

     AddSubCatalogs(ref root, cc, lngRootID);        

     tplMain.Root.Add(root);           

  return tplMain.Root;                   

  }

        private void AddSubCatalogs(ref Ext.Net.TreeNode root, OCatalogCollection cc, long lngID)   

      {            

Ext.Net.TreeNode node = null;         

    int iPoint = 0;           

  string texts = "";         

    foreach (OCatalog c in cc)       

      {               

  if (c.ParentID == lngID && c.ID != c.ParentID)            

     {                  

   //当限制显示当前部门时判断                

     if (c.ID != this.CurrCatalogID || this.LimitCurr == false)          

           {                     

        node = new Ext.Net.TreeNode();      

                node.NodeID = c.ID.ToString();            

             node.Text = c.Name;                     

        if (c.ParentID == 1)        

                 {                           

  node.Expanded = true;                  

       }                  

       else              

           {                         

    node.Expanded = false;         

                }

                                                              

  node.IconFile = @"..\Images\left_data.gif";         

                AddSubCatalogs(ref node, cc, c.ID);           

              root.Nodes.Add(node);

                        iPoint++;

                    }                

}             }                       

       }

由于每个公司的数据绑定方法不一样,大家请根据自己的情况进行树数据绑定。

 [DirectMethod]
        public void LoadData(long lngCatalogID) //点击节点后现在数据
        {

//自己根据实际情况写代码

}

 [DirectMethod]
        public bool saveCatory()//保存节点,可添加或修改,成功返回true
        {}

  [DirectMethod]
        public bool DeleteCatory()//删除节点,成功返回true
        {}

 

 

转载于:https://www.cnblogs.com/extjs-net/archive/2012/08/22/TreePanel.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值