从数据库获取构造树结构是ExtJS TreePanel的核心技术,常用方法是TreeStroe里配置proxy,这种方式的root成了一个不受控制的节点。

TreeStroe的root实际是一个层叠json数据,大部分情况是直接写一些简单数据,但在实际应用中必定是要从数据库读取的。我的方法是先用Ext.Ajax.request获取root数据形成TreeStroe。定义一个全局的TreeStroe名字是mTreeStore,用Ext.Ajax.request获得root数据。TreeStoreRefresh函数与此类似,将mTreeStore的root换为新值。TreePanel的rootVisible属性必须为true,增加一个节点单击事件显示节点的信息。

var mTreeStore = null;
Ext.Ajax.request({
async: false,
url: '/api/BasicData_API/GetBasicTablesTreeSource',
method: 'get',
success: function (response, options)
{
var TreeRoot = Ext.decode(response.responseText);
mTreeStore = Ext.create('Ext.data.TreeStore',
{
root: TreeRoot
});
},
failure: function (response, options)
{
//var responseArray = Ext.decode(response.responseText);
Ext.Msg.alert('服务器错误', '数据处理错误原因:\n\r' + response.responseText);
}
}); function TreeStoreRefresh()
{
Ext.Ajax.request({
async: false,
url: '/api/BasicData_API/GetBasicTablesTreeSource',
method: 'get',
success: function (response, options)
{
var TreeRoot = Ext.decode(response.responseText);
if (mTreeStore != null)
{
mTreeStore.setRoot(TreeRoot);
}
},
failure: function (response, options)
{
//var responseArray = Ext.decode(response.responseText);
Ext.Msg.alert('服务器错误', '数据处理错误原因:\n\r' + response.responseText);
}
});
} Ext.define('TreeToolbarCls', {
extend: 'Ext.toolbar.Toolbar',
padding:'0 0 0 0',
items: [{
text: '刷新',
iconCls: 'refresh',
handler: TreeStoreRefresh,
height: 30,
width: 65
}]
}); Ext.define('U1TreeCls',
{
extend: 'Ext.tree.Panel',
xtype: 'U1Tree_xtype',
//title: '基础数据字典',
rootVisible: true,
width: 300,
store: mTreeStore,
scrollable: true,
tbar:Ext.create('TreeToolbarCls'),
listeners:
{
itemclick: NodeClick
}
}); function NodeClick(node, record, item, index, e, eOpts)
{  if (typeof (record.data) == "undefined")  {    return;  }  var message = Ext.String.format('Level={0}<br/>state={1}', record.data.Level, record.data.state);  Ext.Msg.alert("节点信息", message);}

下面是后台C#代码

定义一个TreeNode类,包含TreePanel节点固有的一些属性,也可以任意扩充,利用这个可以自定义许多附加数据,如我在里面定义Level表示节点的级别。

  [Authorize]
[RoutePrefix("api/BasicData_API")]
public class BasicData_APIController : ApiController
{
[Route("GetBasicTablesTreeSource")]
public HttpResponseMessage GetBasicTablesTreeSource(string condition = null)
{
List<TreeNode> lstF = new List<TreeNode>();
ZydAdonet z = ZydAdonet.Instance();
string s1 = "select TableName,title from BaseDataTables order by TableName";
string sqltext = s1;
DataTable dt1;
string ErrMes;
z.Sql2DTReadOnly(s1, out dt1, null, out ErrMes);
TreeNode tnd;
      foreach (DataRow drx in dt1.Rows)      {        tnd = new TreeNode        {          id = drx["TableName"].ToString(),          text = drx["title"].ToString(),          Level = 1,          iconCls = "table_6",          state = drx["TableName"].ToString() + " OK",          leaf = true        };        lstF.Add(tnd);      }      TreeNode root = new TreeNode      {        text = "基础数据字典",        expanded = false,        iconCls = "folder_close",        Level = 0,        state = "RootOfTree",        leaf = true      };      if (lstF.Count > 0)      {        root.expanded = true;        root.leaf = false;        root.iconCls = "folder_open";        root.children = lstF;      } string JsonStr;
JsonStr = JsonConvert.SerializeObject(root);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
response.Content = new StringContent(JsonStr, Encoding.GetEncoding("UTF-8"), "application/json");
response.Headers.CacheControl = new CacheControlHeaderValue()
{
MaxAge = TimeSpan.FromMinutes(10)
};
return response;
}
} internal class TreeNode
{
public string id { get; set; }
public string text { get; set; }
public string iconCls { get; set; }
public string state { get; set; }
public bool leaf { get; set; }
public int Level { get; set; }
public bool expanded { get; set; }
public List<TreeNode> children { get; set; }
}

在NodeClick函数中断可以监视到更多的信息:

最后的运行效果:

 

然后更改数据表里的数据,点“刷新”就实现了TreePanel节点的刷新。

ASP.NET MVC 异步获取和刷新ExtJS6 TreeStore的更多相关文章

  1. ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的

    在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...

  2. ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后

    ASP.NET MVC借助jQuery的验证机制,提供了一套从客户端到服务端异步验证的解决方案,通常情况下,用起来相当方便.但面对一些相对特殊的情况,可能会遇到验证失效的场景,比如在使用ajax动态异 ...

  3. asp.net mvc异步查询

    对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...

  4. c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作

    ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...

  5. ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建

    在上一篇"ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式.错误信息提示.validate方法的背后"中,了解了jQuery如何验证,如何显示错误信息,本篇要 ...

  6. ASP.NET MVC使用jQuery无刷新上传

    昨晚网友有下载了一个jQuery无刷新上传的小功能,他尝试搬至ASP.NET MVC应用程序中去,在上传死活无效果.Insus.NET使用Teamviewer远程桌面,操作一下,果真是有问题.网友是说 ...

  7. 在ASP.NET MVC 中获取当前URL、controller、action 、参数

    URL的获取很简单,ASP.NET通用:[1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟目录名 ...

  8. 对于asp.net mvc异步查询

    如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合mvc实现一个产品列表的Demo. 问 ...

  9. MVC—实现ajax+mvc异步获取数据

    之前写过ajax和一般处理程序的结合实现前后台的数据交换的博客,如今做系统用到了MVC,同一时候也用到了异步获取数据. ajax+一般处理程序与MVC+ajax原理是一样的在"URL&quo ...

随机推荐

  1. sql例子

    select * from plat_material_resource where stl_url LIKE '/data1/upload%' --截取字符串 UPDATE plat_materia ...

  2. swfit-计时器

    import UIKit class FourVC: UIViewController { var label:UILabel = UILabel() var index : Int = var ti ...

  3. buy

    <script type="text/javascript"> var is_enabled = -1; var checkSubmitFlg = false; var ...

  4. InnoDB杂记

    一.InnoDB写数据流程(猜想) myisam是将索引放入内存缓存(Key Cache,大小有key_buffer_size设置) innodb时间索引和数据文件都放入内存缓存池(Buffer Po ...

  5. laravel DB事物

    public function store(Request $request, $id) { $externalAccount = ExternalAccounts::find($id); DB::b ...

  6. EF部分字段更新,自动忽略null字段

    某个项目里的update代码是类似这样的 public T Update<T>(T entity) where T : ModelBase { var set = this.Set< ...

  7. JAVA 对象调用理解图

  8. 用css实现网站切角效果 使用css3属性:渐变

     都是大量的练习,老师练习乒乓球花了大量时间,十万次一个动作的重复,高中班主任说过,世上没有天才,只是重复的次数多了,自然被认作了天才,小小班的学生之所以厉害是因为他们重复一个知识点次数多,所以没有一 ...

  9. css绘制特殊图形,meida查询,display inline-box间隙问题以及calc()函数

    本文同时发表于本人个人网站 www.yaoxiaowen.com 距离上一篇文章已经一个月了,相比于写代码,发现写文章的确是更需要坚持的事情.言归正传,梳理一下这一个月来,在写ife任务时,有必要记录 ...

  10. [原创]在Framelayout中放置button控件出现的覆盖问题

    android Framelayout(帧布局)是很常用的布局,主要用来处理需要多个view叠加显示的情况. 然而在使用中,我发现Framelayout中的Button控件,会挡住所有其他控件,而不论 ...