数据

 

 

<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. 金中欢乐赛 A题

    题目传送门 这道题就贪心.... 正的一坨和负的一坨间隔 #include<cstdio> #include<cstring> #include<algorithm> ...

  2. SHOI 2007 仙人掌图(BZOJ 1023)

    1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2564  Solved: 1062 Descrip ...

  3. NOIP2016提高组D1T2 天天爱跑步

    n<=300000个点的树,每个点有个人于第Ti秒观测,有m<=300000个人于时间0开始从Sj跑到Tj,速度1个点每秒,输出每个点上的人观察到的跑步的人的数量. 前25分:直接模拟每条 ...

  4. linux基础-临时和永久修改ip地址以及通配符相关

    一.临时配置网络(ip,网关,dns) 修改临时ip地址: 1.ifconfig查看当前的网卡和ip地址 2.临时修改IP地址:ifconfig ens32 192.168.16.200/24,ifc ...

  5. HDU1142 (Dijkstra+记忆化搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  6. python学习笔记 async and await

    用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异 ...

  7. TCP的三次握手和四次挥手+TCP和UDP的区别

    TCP的三次握手: LISTEN:表示服务器端的某个socket处于监听状态,可以接收连接了. SYN_SENT:当客户端SOCKET执行connect连接时,它首先发送syn报文,随即会进入到此状态 ...

  8. 写了一个迷你toast提示插件,支持自定义提示文字和显示时间

    写了一个迷你toast提示插件,支持自定义提示文字和显示时间,不想用其他第三方的ui插件,又想要toast等小效果来完善交互的同学可以试试, 代码中还贡献了一段css能力检测js工具函数,做项目的时候 ...

  9. k8s的应用打包工具Helm

    每个成功的软件平台都有一个优秀的打包系统,比如 Debian.Ubuntu 的 apt,Redhat.Centos 的 yum.而 Helm 则是 Kubernetes 上的包管理器. 本章我们将讨论 ...

  10. mysql:functional dependency

    0down vote First, a functional dependency in the form A->B means that, given one value for A, we ...