数据

 

 

<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="command_timeout">36000</property>
<property name="connection.connection_string">
Data Source=MINMIN\SQLEXPRESS;Initial Catalog=ZTREEDB;Integrated Security=True;
</property>
<mapping assembly="ZTree.Domain" />
</session-factory>
</hibernate-configuration>

 

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Eolande.ZTree.Domain" namespace="Eolande.ZTree.Domain">
<class name="ZTreeDomain" table="ZTree">
<id name="id" column="[Id]"></id>
<property name="pId" column="[PId]"/>
<property name="name" column="[Name]"/>
<property name="open" column="[Open]"/>
</class> </hibernate-mapping>
using System;
using System.Runtime.Serialization; namespace ZTree.Domain
{
[Serializable]
[DataContract]
public partial class ZTreeDomain
{
[DataMember]
public virtual int id { get; set; }
[DataMember]
public virtual int pId { get; set; }
[DataMember]
public virtual string name { get; set; }
[DataMember]
public virtual bool open { get; set; } public virtual TreeModel CopyToTreeModel()
{
return new TreeModel() { id = this.id, text = this.name, expanded = this.open };
} }
}

 

using System;
using System.Collections.Generic;
using System.Runtime.Serialization; namespace Eolande.ZTree.Domain
{
[Serializable]
[DataContract]
public class TreeModel
{
public TreeModel()
{
children = new List<TreeModel>();
}
[DataMember]
public virtual int id { get; set; }
[DataMember]
public virtual string text { get; set; }
[DataMember]
public virtual bool expanded { get; set; }
[DataMember]
public virtual bool leaf { get; set; }
[DataMember]
public virtual List<TreeModel> children { get; set; }
}
}

 

 

using Eolande.ZTree.Domain;
using NHibernate.Cfg;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http; namespace ZTree.Web.Controllers
{
public class ZTreeController : ApiController
{ public TreeModel Get()
{
var nhConfig = new Configuration().Configure();
var sessionFactory = nhConfig.BuildSessionFactory();
TreeModel root = null; using (var session = sessionFactory.OpenSession())
{
var list = session.QueryOver<ZTreeDomain>().List().ToList();
var r = list.FirstOrDefault(x => x.pId == -1);
root = new TreeModel() { text = "." }; if (r != null)
{
var p = r.CopyToTreeModel();
root.children.Add(p);
var childs = list.Where(x => x.pId == p.id);
foreach (var c in childs)
{
var m = c.CopyToTreeModel();
root.children.Add(m);
ChildNode(m, list);
}
}
return root;
} } private void ChildNode(TreeModel root, List<ZTreeDomain> list)
{
var childs = list.Where(x => x.pId == root.id);
foreach (var c in childs)
{
var n = c.CopyToTreeModel();
root.children.Add(n);
ChildNode(n, list.Where(x => x.pId == c.id).ToList());
}
}
}
}

 

 

Ext.onReady(function () {

    var store = Ext.create('Ext.data.TreeStore', {
root: {
expanded: true
},
proxy: {
type: 'ajax',
url: 'api/ZTree/Get'
}
});
var treePanel = Ext.create('Ext.tree.Panel', {
id: 'tree-panel',
title: 'Sample Layouts',
region: 'north',
split: true,
height: 360,
minSize: 150,
rootVisible: false,
autoScroll: true,
store: store,
listeners: {
itemclick: function (thisTree, record, item, index, e, options) {
console.log(item);
if (record.get('leaf')) {
Ext.MessageBox.alert('YES', record.get('text'));
}
}
}
}); var contentPanel = {
id: 'content-panel',
region: 'center', // this is what makes this panel into a region within the containing layout
layout: 'card',
margins: '2 5 5 0',
activeItem: 0,
border: true,
html: '<p>content panel</p>'
};
var detailsPanel = {
id: 'details-panel',
title: 'Details',
region: 'center',
bodyStyle: 'padding-bottom:15px;background:#eee;',
autoScroll: true,
html: '<p class="details-info">When you select a layout from the tree, additional details will display here.</p>'
}; Ext.create('Ext.Viewport', {
layout: 'border',
title: 'Ext Layout Browser',
items: [{
layout: 'border',
id: 'layout-browser',
region: 'west',
border: false,
split: true,
margins: '2 0 5 5',
width: 290,
minSize: 100,
maxSize: 500,
items: [treePanel, detailsPanel]
},
contentPanel
],
renderTo: Ext.getBody()
}); });

ext js layout and tree的更多相关文章

  1. Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法

    Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法 最近在适用Ext JS4开发 ...

  2. [Ext JS 4] 实战之Grid, Tree Gird 添加按钮列

    引言 贴一个grid 的例子先: 有这样一个需求: 1. 给 Grid(or Tree Grid)添加一列, 这一列显示是Button. 点击之后可以对这一行进行一些操作 2. 这一列每一行对应的按钮 ...

  3. [Ext JS 4] 实战之Grid, Tree Gird编辑Cell

    前言 本篇这里以稍微复杂一点的Tree Grid 来介绍. 在写编辑grid 之, 先来看一下 grid 的 selType 的配置. 先给一个简单的Tree grid 的例子: Ext.onRead ...

  4. EXT JS 4.3 在线学习

    官网地址:http://docs.sencha.com/extjs/4.1.3/ 相关示例:http://docs.sencha.com/extjs/4.1.3/#!/example Examples ...

  5. Ext Js详解指南

    什么是Ext JS 走进Ext的世界 Ext JS是一款富客户端开发框架它基于javascript.HTML和CSS开发而成,无需安装任何插件即可在常用浏览器中创建出绚丽的页面效果. 个人总结Ext ...

  6. Ext JS 6学习文档–第1章–ExtJS入门指南

    Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS ...

  7. 推荐一本不错的书《Sencha Ext JS 5 Bootcamp in a Book》

    原文:https://www.createspace.com/5425618 看了一下该书目录,感觉不错,Ext JS 5的重点内容都提及了,确实是一本学习Ext JS 5的好书,唯一遗憾的地方就是太 ...

  8. Ext.js高级组件

    第二章:Ext.js高级组件 grid组件 普通方式 表格面板类Ext.grid.Panel xtype(别名):gridpanel.grid title标题.renderTo渲染至.width宽.h ...

  9. Ext JS 6学习文档-第6章-高级组件

    Ext JS 6学习文档-第6章-高级组件 高级组件 本章涵盖了高级组件,比如 tree 和 data view.它将为读者呈现一个示例项目为 图片浏览器,它使用 tree 和 data view 组 ...

随机推荐

  1. 【uva11019-Matrix Matcher】AC自动机+优化+记录

    http://acm.hust.edu.cn/vjudge/problem/33057 题意:在二维文本串T中查找一个二维模板串P出现了多少次. 题解: 拆分模板串P的每一行,建AC自动机.拆分文本串 ...

  2. noip车站分级 拓扑排序

    题目传送门 这道题呢 每次输入一段数就把1~n里面没有在这组数里面的数和他们连一波 表示这些数比他们等级低 然后就搞一搞就好了哇 #include<cstdio> #include< ...

  3. Linux emacs考场配置及对拍脚本

    emacs配置(待补) (global-set-key [f9] 'compile) (global-set-key [f10] 'gud-gdb) (global-set-ket (kbd &quo ...

  4. 也说JS脚本加载控制

    问题背景 前端采用的 iframe + html 做后台管理系统.现在js.jquery插件非常多,每次页面都是引用就类似这样: <script src="../Scripts/jqu ...

  5. [Leetcode Week8]Triangle

    Triangle 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/triangle/description/ Description Given a t ...

  6. android ARM 汇编学习—— 在 android 设备上编译c/cpp代码并用objdump/readelf等工具分析

    学习 android 逆向分析过程中,需要学习 Arm 指令,不可避免要编写一些 test code 并分析其指令,这是这篇文档的背景. 在目前 android 提供的开发环境里,如果要编写 c / ...

  7. ZOJ 3599 K倍动态减法游戏

    下面的文字辅助理解来自http://blog.csdn.net/tbl_123/article/details/24884861 博弈论中的 K倍动态减法游戏,难度较大,参看了好多资料才懵懂! 此题可 ...

  8. 一次向svn中增加所有新增文件 svn add all new files【转】

    以下摘自:<卓有成效的程序员>之自动化 转自:http://blog.csdn.net/spare_h/article/details/6677435 我经常会一次往Subversion里 ...

  9. 2.flume架构以及核心组件

    flume组件主要包含三部分 source:从各个地方收集数据 channel:聚集,相当于临时数据存放的地方.因为数据来的时候,不可能来一条便写一次,那样效率太低,而是先把数据放在通道里,等通道满了 ...

  10. hdu 1364(差分约束)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12056   Accepted: 4397 Description ...