Ext.net TreeGrid

來源:互聯網
上載者:User

  系統中常會面臨處理一些具有多屬性列的而且具有層級關係的資料項目,Ext.Net中 這種情況下一個比較好的選擇就是使用TreeGrid來處理。TreeGrid其實是對TreePanel的繼承和擴充,一次他的資料來源是不支援Store來綁定的,而是通過TreeNode的集合,每個TreeNode通過添加CustomAttributes的ConfigItem來擴充顯示的列屬性。通過配置TreeGrid的TreeLoader來載入業務中的資料。下面給出一個簡單的範例代碼: 

前台HTML

 1    <ext:TreeGrid ID="TG" runat="server" Title="TreeGrid" EnableDD="true"> 2                 <TopBar> 3                     <ext:Toolbar runat="server"> 4                         <Items> 5                             <ext:Button Text="更新" runat="server" OnClientClick="UpdateNodeInfo()"> 6                             </ext:Button> 7                         </Items> 8                     </ext:Toolbar> 9                 </TopBar>10                 <Columns>11                     <ext:TreeGridColumn Width="150" Header="姓名" DataIndex="Name" />12                     <ext:TreeGridColumn Width="150" Header="年齡" DataIndex="Age" />13                     <ext:TreeGridColumn Width="150" Header="性別" DataIndex="Sex" />14                     <ext:TreeGridColumn Width="150" Header="備忘" DataIndex="Remark" />15                 </Columns>16                 <Root>17                     <ext:AsyncTreeNode NodeID="root" Text="root" Expandable="True">18                     </ext:AsyncTreeNode>19                 </Root>20                 <Loader>21                     <ext:TreeLoader DataUrl="/Home/LoadNodes/">22                         <BaseParams>23                             <ext:Parameter Name="id" Value="node.id" Mode="Raw" />24                             <ext:Parameter Name="pId" Value="node.attributes.Name" Mode="Raw" />25                         </BaseParams>26                     </ext:TreeLoader>27                 </Loader>28                 <SelectionModel>29                     <ext:DefaultSelectionModel runat="server">30                     </ext:DefaultSelectionModel>31                 </SelectionModel> 32             </ext:TreeGrid>
後台Controler中的業務資料代碼

 1   public string LoadNodes(string id, string pId) 2         { 3             TreeNodeCollection nodeList = new TreeNodeCollection(); 4             for (int i = 0; i < 10; i++) 5             { 6                 Random ran = new Random(); 7                 var index = ran.Next(); 8                 AsyncTreeNode asyNode = new AsyncTreeNode() 9                 {10                     Text = string.Format("張三{0}", i),11                     NodeID = i.ToString(),12                     Leaf = index % 2 == 0 ? true : false,13                 };14                 asyNode.CustomAttributes.Add(new ConfigItem("Name", asyNode.Text, ParameterMode.Value));15                 asyNode.CustomAttributes.Add(new ConfigItem("Age", (i + 10).ToString(), ParameterMode.Value));16                 asyNode.CustomAttributes.Add(new ConfigItem("Sex", (index % 2 == 0 ? true : false).ToString(), ParameterMode.Value));17                 asyNode.CustomAttributes.Add(new ConfigItem("Remark", "備忘資訊。。。。" + i, ParameterMode.Value));18                 nodeList.Add(asyNode);19                 Thread.Sleep(10);20             }21             return nodeList.ToJson();22         }

 那麼我們如何更新TreeGrid中的資料呢?一個方法是更新了資料之後,重新載入編輯節點的資料項目;另一個是更新成功後,不重新載入,只是修改前台介面的值。對比之下後者的效能跟定更高,對伺服器和資料庫來說減小了壓力,那麼我們如何來更新前台介面上的資料呢?這裡簡單介紹一個方法,舉例說明更新介面方法,比如我們更新選中行(其實是個TreeNode/AsyncTreeNode)資料:

資料更新處理Js code

 1  function UpdateNodeInfo() { 2             var node = TG.getSelectionModel().selNode; 3             if (node) { 4                 var nodeEl = node.ui.elNode; 5                 var columnTest1 = nodeEl.childNodes[0].childNodes[0]; 6                 var columnTest2 = nodeEl.childNodes[1].childNodes[0]; 7                 var columnTest3 = nodeEl.childNodes[2].childNodes[0]; 8                 var columnTest4 = nodeEl.childNodes[3].childNodes[0]; 9                 node.ui.node.attributes.Name = columnTest1.innerHTML = '王五';10                 node.ui.node.attributes.Age = columnTest2.innerHTML = '100';11                 node.ui.node.attributes.Sex = columnTest3.innerHTML = 'boy';12                 node.ui.node.attributes.Remark = columnTest4.innerHTML = '王五.....';13             }14         }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.