上节学习了Ext中表格控件,从创建,到定义数据源、绑定显示,大体明白了一个基本的表格控件是怎么实现的。而我们用表格控件多用于从各种数据源接收数据并显示出来,并不是写死的。本章我们就不同数据源的不同实现方式分别举例说明。

一、Ext的表格控件如何绑定?

1. XML数据源

假设我们有一个数据源是以XML的形式存在的,我们需要从里面取出数据并绑定在界面。XML的结构如下:

  1.  
  2. <students> 
  3. <stu> 
  4. <age>15</age> 
  5. <name>奥特曼</name> 
  6. <hobby>打小怪兽</hobby> 
  7. </stu> 
  8. <stu> 
  9. <age>13</age> 
  10. <name>孙悟空</name> 
  11. <hobby>吃桃子</hobby> 
  12. </stu> 
  13. <stu> 
  14. <age>100</age> 
  15. <name>石曼迪</name> 
  16. <hobby>睡觉</hobby> 
  17. </stu> 
  18. </students>

其绑定部分代码比上节的简单多了,最少不用定义数据源了,只需要告诉Ext要的数据在哪里去取即可,实现代码如:

  1.  
  2. //解析数据源 
  3. var ds = new Ext.data.Store({ 
  4. url: 'student.xml', 
  5. reader: new Ext.data.XmlReader({record:'stu'}, [ 
  6. { name: 'age' }, { name: 'name' }, { name: 'hobby' } 
  7. ]) 
  8. }); 
  9. ds.load();

url:指定XML文件的存放位置,写相对路径。然后需要把读取器换成XmlReader,并在第一个参数里面告诉Ext开始解析的每条数据的根节点,根据本文提供的XML文件,每条数据的根节点是“stu”,后面的就不用解释了,和前面的一样。

效果如:

最后需要注意的是,本例包括以后的例子需要部署到服务器上运行,才能出现结果,不能双击网页文件查看效果,因为要和服务器交互。

2. JSON格式数据

首先得明白什么是JSON格式,json是js本身的一种数据格式,他是数据存储中最快的一种格式,现在已经广泛应用于互联网产品中,如腾讯的开心农场,数据传输就用的是json。

josn的数据组织结构{key:value,key1:value1,...n},比较难懂,一般各种语言都提供了json转换方法,可以直接调用,省的大家拼字符串。

下面举例说明json的写法,拿一个一组数据为例:

  1. {data: [ 
  2. {projectId: 100, project: 'Ext表单基本知识', due:'06/24/2010'}, 
  3. {projectId: 102, project: 'Ext表格基本知识', due:'07/11/2010'}, 
  4. {projectId: 102, project: 'Ext还可以汇总', due:'07/15/2010'} 
  5. ]}

最外层是一对花括弧表示数据开始和结束,里面有一个节点叫“data”表示根结点,后面跟“[]”表示子节点的数据,再里面就是具体的键值对数据表示形式了,每个数据用英文逗号隔开,每条数据都用花括弧括起来。

然后我们来解析他,根据我们上节所说,现在的数据源变成json格式,那么解析器也得变成JsonReader,只需要改动这一处即可,修改后的代码如下:

  1.  
  2. <script type="text/javascript"> 
  3. function GridBasic() { 
  4. //定义表格 
  5. var cm = new Ext.grid.ColumnModel([ 
  6. { header: '项目标号', dataIndex: 'projectId' }, 
  7. { header: '项目描述', dataIndex: 'project' }, 
  8. { header: '项目时间', dataIndex: 'due' } 
  9. ]); 
  10. //解析数据源 
  11. var ds = new Ext.data.Store({ 
  12. url: 'Test.json', 
  13. reader: new Ext.data.JsonReader({ root: 'data' }, ['projectId' ,'project' , 'due' ]) 
  14. }); 
  15. ds.load(); 
  16. //装配表格 
  17. var grid = new Ext.grid.GridPanel({ 
  18. el: 'grid', 
  19. ds: ds, 
  20. cm: cm, 
  21. height:200, 
  22. width:500 
  23. }); 
  24. grid.render(); 
  25. } 
  26. Ext.onReady(GridBasic); //开始执行 
  27. </script>

最终运行效果如:

3. 使用动态语言绑定

PHP:

PHP本身就有处理函数:json_encode(数组)使用的时候只需把数据库中查询出来的数据已数组形式传递进去,然后输出即可,实现代码如:

  1.  
  2. <?php 
  3. $arr=array( 
  4. 0=>array('name'=>'孔雀','age'=>'88','adr'=>'道观'), 
  5. 1=>array('name'=>'奥特曼','age'=>'150','adr'=>'火星'), 
  6. 2=>array('name'=>'石曼迪','age'=>'18','adr'=>'地球'), 
  7. 3=>array('name'=>'闹闹','age'=>'28','adr'=>'山东'), 
  8. ); 
  9. echo '{data:'.json_encode($arr).'}'; 
  10. ?>

前台页面也只需要更改数据源为输出数据的文件名即可,完整代码如:

  1.  
  2. <script type="text/javascript"> 
  3. function GridBasic() { 
  4. //定义表格 
  5. var cm = new Ext.grid.ColumnModel([ 
  6. { header: '项目标号', dataIndex: 'name' }, 
  7. { header: '项目描述', dataIndex: 'age' }, 
  8. { header: '项目时间', dataIndex: 'adr' } 
  9. ]); 
  10. //解析数据源 
  11. var ds = new Ext.data.Store({ 
  12. url: 'test.php', 
  13. reader: new Ext.data.JsonReader({ root: 'data' }, ['name' ,'age' , 'adr' ]) 
  14. }); 
  15. ds.load(); 
  16. //装配表格 
  17. var grid = new Ext.grid.GridPanel({ 
  18. el: 'grid', 
  19. ds: ds, 
  20. cm: cm, 
  21. height:200, 
  22. width:500 
  23. }); 
  24. grid.render(); 
  25. } 
  26. Ext.onReady(GridBasic); //开始执行 
  27. </script>

和前面学习过的基本一样。

绑定结果如:

ASP.NET:

使用asp.net就更简单了,传统的asp.net直接在提供数据的页面的page_load事件下输出即可,使用asp.net内置的处理对象JavaScriptSerializer,使用方法如:新建一个提供数据用的页面data.aspx,在后台写上如下代码:

  1.  
  2. using System; 
  3. using System.Collections.Generic; 
  4. using System.Linq; 
  5. using System.Web; 
  6. using System.Web.UI; 
  7. using System.Web.UI.WebControls; 
  8. using System.Web.Script.Serialization; 
  9.  
  10. public partial class data : System.Web.UI.Page 
  11. { 
  12. protected void Page_Load(object sender, EventArgs e) 
  13. { 
  14. List<Student> students = new List<Student> { 
  15. new Student { Id = 1, Name = "孔雀", Adr = "道观" } , 
  16. new Student { Id=2, Name="闹闹", Adr="山¦东"}, 
  17. new Student { Id=1, Name="石曼迪", Adr="地球"} 
  18. }; 
  19. JavaScriptSerializer j = new JavaScriptSerializer(); 
  20. Response.Write(j.Serialize(students)); 
  21. Response.End(); 
  22. } 
  23. } 
  24.  
  25. public class Student 
  26. { 
  27. public int Id { get; set; } 
  28. public string Name { get; set; } 
  29. public string Adr { get; set; } 
  30. }

在接受页面的前台协商EXT代码即可:

  1.  
  2. <script type="text/javascript"> 
  3. function GridBasic() { 
  4. //定义表格 
  5. var cm = new Ext.grid.ColumnModel([ 
  6. { header: '姓名', dataIndex: 'Name' }, 
  7. { header: '编号', dataIndex: 'Id' }, 
  8. { header: '地址', dataIndex: 'Adr' } 
  9. ]); 
  10. //解析数据源 
  11. var ds = new Ext.data.Store({ 
  12. url: 'data.aspx', 
  13. reader: new Ext.data.JsonReader({ }, ['Name', 'Id', 'Adr']) 
  14. }); 
  15. ds.load(); 
  16. //装配表格 
  17. var grid = new Ext.grid.GridPanel({ 
  18. el: 'grid', 
  19. ds: ds, 
  20. cm: cm, 
  21. height: 200, 
  22. width: 500 
  23. }); 
  24. grid.render(); 
  25. } 
  26. Ext.onReady(GridBasic); //开始执行 
  27. </script>

最终运行效果如:

ASP.NET MVC:

Asp.net mvc作为微软最新推出的架构模式,已经在各个行业逐步应用起来了,由于它采用的不是传统的服务器控件-事件模式,改变以往服务器端运行模式,采用表单提交方式,故而非常有利于测试和请求控制,没了以往那么多的控件,表格必须得手写代码循环绑定,我们也举一个MVC的例子来说明数据绑定吧。

先使用VS2010创建一个MVC项目,在view下面的share里面的Site.Master里面添加对Ext的引用。然后在model里面增加一个返回集合的方法,最后在Index对应的Controller里面增加json的输出方法,然后在view里Index对应的视图上配置数据源即可。

Model对应的代码如:

  1.  
  2. using System; 
  3. using System.Collections.Generic; 
  4. using System.Linq; 
  5. using System.Web; 
  6. namespace Ext_aspnet_MVC.Models 
  7. { 
  8. public class Student 
  9. { 
  10. public int Id { get; set; } 
  11. public string Name { get; set; } 
  12. public string Adr { get; set; } 
  13. } 
  14.  
  15. public class StudentModel 
  16. { 
  17. public List<Student> GetAll() 
  18. { 
  19. List<Student> students = new List<Student> { 
  20. new Student { Id = 1, Name = "孔雀", Adr = "道观" } , 
  21. new Student { Id=2, Name="闹闹", Adr="山¦东"}, 
  22. new Student { Id=1, Name="石曼迪", Adr="地球"} 
  23. }; 
  24. return students; 
  25. } 
  26. } 
  27. }

Controller对应的代码如:

  1. public JsonResult GetData() 
  2. { 
  3. StudentModel stu = new StudentModel(); 
  4. List<Student> s = stu.GetAll(); 
  5. return Json(new { data = s}, JsonRequestBehavior.AllowGet); 
  6. }

注:MVC2出于对网站数据的保护,默认禁止通过get的请求返回JsonResult数据,你可以在返回Json时,传入第二个参数 JsonRequestBehavior.AllowGet。

View对应的代码如:

  1.  
  2. <script type="text/javascript"> 
  3. function GridBasic() { 
  4. //定义表格 
  5. var cm = new Ext.grid.ColumnModel([ 
  6. { header: '姓名', dataIndex: 'Name' }, 
  7. { header: '编号', dataIndex: 'Id' }, 
  8. { header: '地址', dataIndex: 'Adr' } 
  9. ]); 
  10. //解析数据源 
  11. var ds = new Ext.data.Store({ 
  12. url: 'Home/GetData', 
  13. reader: new Ext.data.JsonReader({ root: 'data' }, ['Name', 'Id', 'Adr']) 
  14. }); 
  15. ds.load(); 
  16. //装配表格 
  17. var grid = new Ext.grid.GridPanel({ 
  18. el: 'grid', 
  19. ds: ds, 
  20. cm: cm, 
  21. height: 200, 
  22. width: 500 
  23. }); 
  24. grid.render(); 
  25. } 
  26. Ext.onReady(GridBasic); //开始执行 
  27. </script>

最终的效果如:

二、总结

OK本次表格控件的绑定就到此,一共讲解了多种数据源的绑定方法,希望大家能够在其中找到自己认为有价值的东西,其中asp,net MVC后面会专门写文章解释,还有目前只是完成了一个基本的绑定,还没有进行分页、新增、修改和删除等操作,下次将会实现这些,以期完整一个完整的表格绑定。

Ext入门学习系列(五)表格控件(2)的更多相关文章

  1. Ext入门学习系列(五)表格控件(1)

    上节学习了Ext面板控件,为后面的各个控件学习奠定基础,在此基础上本章将学习网络开发最期待的功能——表格控件. 我们都知道网络编程语言中,除了.net其他的基本没有提供网格控件,而最近的asp.net ...

  2. Ext入门学习系列(五)表格控件(3)

    上节学习了Ext中如何绑定服务器端传递的数据.分别用asp.net和asp.net MVC.PHP.XML为例.本节主要介绍绑定之后的分页功能. 一.Ext的表格控件如何绑定? 分页是Ext自带的一个 ...

  3. ExtJS4.2学习(九)属性表格控件PropertyGrid(转)

    鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-15/178.html ------------- ...

  4. ExtJS4.2学习(10)分组表格控件--GroupingGrid(转)

    鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-17/179.html ------------- ...

  5. Android入门之GridView(表格控件)

    GridView是一个表格控件,可以在每个单元格中显示自定义的View或者字符串.在这里我们要实现一个图标下方有文字的效果. 1.首先我们应自定义布局文件image_text.xml.代码如下: &l ...

  6. Ext入门学习系列(四)面板控件

    第四章 使用面板 上节学习了Ext复杂对话框,更进一步了解了Ext的运行机制.本章重点来了解Ext所有控件的基础——面板控件. 一.Ext的面板是什么? 同样先来看看几个效果: 基本面板,点击右上角小 ...

  7. leaflet-webpack 入门开发系列四图层控件样式优化篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  8. Ext入门学习系列(三)复杂自定义窗体

    通过前2节的学习,基本掌握了Ext的语法和运行原理,可以作出一些简单的应用.本节我们一起来完成复杂点的对话框操作,因为在实际项目中经常要用到确认对话框等多种操作,然后根据客户的选择作出不同的响应. 一 ...

  9. Ext入门学习系列(二)弹出窗体

    第二章 弹出窗体 上节学习了Ext的环境搭建和最基本的一个操作——弹出对话框,作为一个引子,本节讲述如何弹出一个新窗体,从实例讲解Ext的基本运行原理. 一.Ext的窗体长什么样? 先来看看几个效果, ...

随机推荐

  1. 2016 系统设计第一期 (档案一)MVC bootstrap model弹出窗

    局部代码: <!-- 按钮触发模态框 --> <div style=""> <button class="btn btn-primary&q ...

  2. iOS 的UINavigationController详解与使用添加UIBarButtonItem

    转发自:http://blog.csdn.net/totogo2010/article/details/7681879 分类: iOS开发入门2012-06-21 11:10 53077人阅读 评论( ...

  3. 微软职位内部推荐-Senior Engineering Lead

    微软近期Open的职位: Job Title: Senior Engineering LeadDivision: Microsoft Business SolutionWork Location: S ...

  4. sharepoint 2010 masterpage中必须的Content PlaceHolder

    Professional SharePoint 2010 Branding and Use

  5. linux grep、find 命令详解

    grep1.作用grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权 ...

  6. [原创] zabbix学习之旅一:源码安装

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存 ...

  7. SSL与TLS的区别以及介绍

    转载 :http://kb.cnblogs.com/page/197396/ SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议 ...

  8. IntelliJ IDEA14 安装

    一.官网下载 IntelliJ IDEA的官网:https://www.jetbrains.com/idea/ 进入选择Get IntelliJ IDEA Now ,进入下载页:https://www ...

  9. 【高斯消元】Poj 1222:EXTENDED LIGHTS OUT

    Description In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each ...

  10. uva 11039

    水题  排序 判符号 #include <cstdio> #include <cstring> #include <algorithm> using namespa ...