• ExtJS - UI组件 - Grid


    更新记录
    转载请注明出处:
    2022年8月17日 发布。
    2022年8月13日 从笔记迁移到博客。

    ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html

    Ext.grid.Panel(网格)

    说明

    Grid组件常用于显示仓库的数据。Ext.grid.Panel 继承自Ext.panel.Table。
    注意:
    经典工具集(Classic toolkit)中网格对应的类为:Ext.grid.Panel
    现代工具集(Modern toolkit)中网格对应的类为:Ext.grid.Grid

    语法:

    1. Ext.create('Ext.grid.Panel',{
    2. grid properties..
    3. columns : [Columns]
    4. });

    支持的列类型

    Classic toolkit工具集,在Ext.grid.column命名空间下

    支持的单元格类型

    Classic toolkit工具集,在Ext.grid.cell命名空间下

    特性(Features)

    特性用于添加Gird额外的功能

    Ext.grid.feature.Feature是所有特性的基类

    实例:配置列

    实例:列最基本的使用

    image

    1. {
    2. xtype: 'gridpanel', //grid面板
    3. title: 'PandaTest',
    4. width: 600,
    5. height: 300,
    6. frame: true, //带边框
    7. columns: [ //定义列
    8. { text: '姓名', dataIndex: 'name', }, //text为显示的列名称,dataIndex为对应的数据项
    9. { text: '性别', dataIndex: 'sex', },
    10. { text: '年龄', dataIndex: 'age', },
    11. ],
    12. store: { //定义数据仓库
    13. data: [ //直接内联数据做测试使用
    14. {name: 'Panda', sex: '男', age: 666 },
    15. ],
    16. }
    17. }

    实例:设置列自动填充

    使用forceFit配置项

    image

    1. {
    2. xtype: 'gridpanel', //grid面板
    3. title: 'PandaTest',
    4. width: 600,
    5. height: 300,
    6. forceFit: true, //自动拉伸填充空白
    7. frame: true, //带边框
    8. columns: [ //定义列
    9. { text: '姓名', dataIndex: 'name', },
    10. { text: '性别', dataIndex: 'sex', },
    11. { text: '年龄', dataIndex: 'age', },
    12. ],
    13. store: { //定义数据仓库
    14. data: [ //直接内联数据做测试使用
    15. {name: 'Panda', sex: '男', age: 666 },
    16. ],
    17. }
    18. }

    实例:设置列隐藏

    使用列的hidden配置项即可image

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. data: [
    14. {
    15. id: 666,
    16. name: 'Panda',
    17. price: 66.66
    18. },
    19. {
    20. id: 888,
    21. name: 'Cat',
    22. price: 77.77
    23. },
    24. {
    25. id: 999,
    26. name: 'Dog',
    27. price: 88.88
    28. }
    29. ]
    30. });
    31. //定义Grid
    32. Ext.define('PandaApp.com.ProductGrid', {
    33. extend: 'Ext.grid.Panel', //继承自Grid组件
    34. title: '商品信息', //标题
    35. closable: true, //可关闭
    36. draggable: true, //可拖拽
    37. renderTo: Ext.getBody(), //渲染到body
    38. width: 500, //设置宽度
    39. store: dataStore, //关联Store
    40. columns: [ //设置列
    41. {
    42. header: '商品编号', //设置列标题
    43. dataIndex: 'id', //设置对应的Store数据列
    44. flex: 0.5, //设置列的想对宽度
    45. hidden: true, //设置列隐藏
    46. },
    47. {
    48. header: '商品',
    49. dataIndex: 'name',
    50. flex: 1
    51. },
    52. {
    53. header: '价格',
    54. dataIndex: 'price',
    55. flex: 1
    56. }
    57. ]
    58. });
    59. //创建Grid实例
    60. Ext.create('PandaApp.com.ProductGrid');

    实例:设置列禁止排序

    默认情况下,是自动开启列排序的,可以将sortable配置项设置为false禁用排序

    image

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. data: [
    14. {
    15. id: 666,
    16. name: 'Panda',
    17. price: 66.66
    18. },
    19. {
    20. id: 888,
    21. name: 'Cat',
    22. price: 77.77
    23. },
    24. {
    25. id: 999,
    26. name: 'Dog',
    27. price: 88.88
    28. }
    29. ]
    30. });
    31. //定义Grid
    32. Ext.define('PandaApp.com.ProductGrid', {
    33. extend: 'Ext.grid.Panel', //继承自Grid组件
    34. title: '商品信息', //标题
    35. closable: true, //可关闭
    36. draggable: true, //可拖拽
    37. renderTo: Ext.getBody(), //渲染到body
    38. width: 500, //设置宽度
    39. store: dataStore, //关联Store
    40. columns: [ //设置列
    41. {
    42. header: '商品编号', //设置列标题
    43. dataIndex: 'id', //设置对应的Store数据列
    44. flex: 0.5, //设置列的想对宽度
    45. hidden: true, //设置列隐藏
    46. },
    47. {
    48. header: '商品',
    49. dataIndex: 'name',
    50. flex: 1,
    51. sortable: false, //禁用排序,重点在这里~~~~~~~~
    52. },
    53. {
    54. header: '价格',
    55. dataIndex: 'price',
    56. flex: 1
    57. }
    58. ]
    59. });
    60. //创建Grid实例
    61. Ext.create('PandaApp.com.ProductGrid');

    实例:设置远程排序

    可以将组件的remoteSort配置项设置为true,开启远程排序

    实例:设置列过滤

    image

    在grid中添加plugins: 'gridfilters'过滤插件

    然后在列中设置过滤filter配置项

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. data: [
    14. {
    15. id: 666,
    16. name: 'Panda',
    17. price: 66.66
    18. },
    19. {
    20. id: 888,
    21. name: 'Cat',
    22. price: 77.77
    23. },
    24. {
    25. id: 999,
    26. name: 'Dog',
    27. price: 88.88
    28. }
    29. ]
    30. });
    31. //定义Grid
    32. Ext.define('PandaApp.com.ProductGrid', {
    33. extend: 'Ext.grid.Panel', //继承自Grid组件
    34. title: '商品信息', //标题
    35. closable: true, //可关闭
    36. draggable: true, //可拖拽
    37. plugins: 'gridfilters', //添加过滤插件
    38. renderTo: Ext.getBody(), //渲染到body
    39. width: 500, //设置宽度
    40. store: dataStore, //关联Store
    41. columns: [ //设置列
    42. {
    43. header: '商品编号', //设置列标题
    44. dataIndex: 'id', //设置对应的Store数据列
    45. flex: 0.5, //设置列的想对宽度
    46. hidden: true, //设置列隐藏
    47. },
    48. {
    49. header: '商品',
    50. dataIndex: 'name',
    51. flex: 1,
    52. filter:'string', //开启过滤。设置过滤的类型
    53. },
    54. {
    55. header: '商品',
    56. dataIndex: 'name',
    57. flex: 1,
    58. filter: { //设置列具体过滤配置
    59. type: 'string', //过滤的类型为string
    60. itemDefaults: { //具体的过滤配置项
    61. emptyText: '搜索内容' //提示文本
    62. }
    63. }
    64. },
    65. {
    66. header: '价格',
    67. dataIndex: 'price',
    68. flex: 1,
    69. renderer: function(value){ //自定义渲染
    70. return Ext.String.format("¥{0}",value);
    71. }
    72. }
    73. ]
    74. });
    75. //创建Grid实例
    76. Ext.create('PandaApp.com.ProductGrid');

    实例:设置列自定义渲染(强调显示)

    image

    在列配置项中使用render函数即可
    render函数的参数列表:
    value: The value of the bound model field
    metaData: Additional attributes of the cell being rendered, for example, tdCls,
    tdAttr, and tdStyle
    record: The record for the current row
    rowIndex: The index of the current row
    colIndex: The index of the current column
    store: The store that is bound to the grid
    view: The grid view

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. {name: 'name', mapping : 'name'},
    6. {name: 'age', mapping : 'age'},
    7. {name: 'marks', mapping : 'marks'}
    8. ]
    9. });
    10. // 定义数据
    11. var myData = [
    12. { name : "Asha", age : "16", marks : "90" },
    13. { name : "Vinit", age : "18", marks : "95" },
    14. { name : "Anand", age : "20", marks : "76" },
    15. { name : "Niharika", age : "21", marks : "86" },
    16. { name : "Manali", age : "22", marks : "57" }
    17. ];
    18. // 创建数据仓库
    19. var gridStore = Ext.create('Ext.data.Store', {
    20. model: 'StudentDataModel', //指定Model
    21. data: myData //指定内联数据
    22. });
    23. // 创建Gird
    24. Ext.create('Ext.grid.Panel', {
    25. id: 'gridId', //定义组件Id
    26. store: gridStore, //指定数据仓库
    27. stripeRows: true, //定义条纹
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. collapsible: true, //定义可折叠
    31. title: '学生成绩', //Grid的面板标题
    32. width: 600, //定义宽带
    33. renderTo: Ext.getBody(),//渲染到body
    34. enableColumnMove: true, //开启列可移动
    35. enableColumnResize:true,//开启列可调整大小
    36. columns: [ //定义列Header行
    37. {
    38. header: "学生姓名", //定义列标题
    39. dataIndex: 'name', //定义列对应的数据列名
    40. id : 'name', //设置列Id
    41. flex: 0.5, //定义列的宽度比例
    42. sortable: true, //设置为可排序
    43. hideable: true //设置为可隐藏
    44. },
    45. {
    46. header: "年龄",
    47. dataIndex: 'age',
    48. flex: .5,
    49. sortable: true,
    50. hideable: true,
    51. //自定义渲染
    52. renderer : function(value, metaData, record, rowIndex, colIndex, store,view) {
    53. //对未成年人强调显示
    54. if(value < 18)
    55. {
    56. result = '' + value + '';
    57. }
    58. else
    59. {
    60. result = value;
    61. }
    62. return result;
    63. }
    64. },
    65. {
    66. header: "分数",
    67. dataIndex: 'marks',
    68. flex: .5,
    69. sortable: true
    70. },
    71. {
    72. header: "是否优秀",
    73. dataIndex: 'marks',
    74. flex: .5,
    75. sortable: true,
    76. //自定义渲染
    77. //设置显示条件
    78. //设置分数对应等级
    79. //显示为优秀、良好、普通
    80. renderer : function (value, metadata, record, rowIndex, colIndex, store) {
    81. if (value > 85) {
    82. return '优秀';
    83. } else if(value > 75){
    84. return '良好';
    85. } else {
    86. return '普通';
    87. }
    88. }
    89. }
    90. ]
    91. });

    实例:设置列自定义渲染(加货币符号)

    image

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. data: [
    14. {
    15. id: 666,
    16. name: 'Panda',
    17. price: 66.66
    18. },
    19. {
    20. id: 888,
    21. name: 'Cat',
    22. price: 77.77
    23. },
    24. {
    25. id: 999,
    26. name: 'Dog',
    27. price: 88.88
    28. }
    29. ]
    30. });
    31. //定义Grid
    32. Ext.define('PandaApp.com.ProductGrid', {
    33. extend: 'Ext.grid.Panel', //继承自Grid组件
    34. title: '商品信息', //标题
    35. closable: true, //可关闭
    36. draggable: true, //可拖拽
    37. renderTo: Ext.getBody(), //渲染到body
    38. width: 500, //设置宽度
    39. store: dataStore, //关联Store
    40. columns: [ //设置列
    41. {
    42. header: '商品编号', //设置列标题
    43. dataIndex: 'id', //设置对应的Store数据列
    44. flex: 0.5, //设置列的想对宽度
    45. hidden: true, //设置列隐藏
    46. },
    47. {
    48. header: '商品',
    49. dataIndex: 'name',
    50. flex: 1,
    51. sortable: false, //禁用排序
    52. },
    53. {
    54. header: '价格',
    55. dataIndex: 'price',
    56. flex: 1,
    57. renderer: function(value){ //自定义渲染
    58. return Ext.String.format("¥{0}",value);
    59. }
    60. }
    61. ]
    62. });
    63. //创建Grid实例
    64. Ext.create('PandaApp.com.ProductGrid');

    实例:配置列类型-说明

    Gird的单元格类型定义在Ext.grid.column命名空间下,所有的单元格类型都继承自Ext.grid.column.Column类型。

    具体的单元格类型

    Ext.grid.column.RowNumberer:序号自动排序。
    Ext.grid.column.Action:图标列,可以单个/多个图标,可以绑定事件。
    Ext.grid.column.Boolean: 渲染布尔数据。
    Ext.grid.column.Date: 渲染日期数据。
    Ext.grid.column.Number: 渲染数值数据。
    Ext.grid.column.Template: 渲染模板数据。
    Ext.grid.column.Check:CheckBox列。

    实例:配置列类型-序号列(rownumberer)

    Grid的行序号列用于显示行的序号,可以自动增长编号

    将列的类型设置为rownumberer类型即可

    1. {
    2. xtype: 'rownumberer', //定义行序号列
    3. align: 'left' //设置对齐方式,支持left、right、center
    4. },

    image

    实例代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. {name: 'name', mapping : 'name'},
    6. {name: 'age', mapping : 'age'},
    7. {name: 'marks', mapping : 'marks'}
    8. ]
    9. });
    10. // 创建数据仓库
    11. var gridStore = Ext.create('Ext.data.Store', {
    12. model: 'StudentDataModel', //指定Model
    13. data: [ //指定内联数据
    14. { name : "Asha", age : "16", marks : "90" },
    15. { name : "Vinit", age : "18", marks : "95" },
    16. { name : "Anand", age : "20", marks : "76" },
    17. { name : "Niharika", age : "21", marks : "86" },
    18. { name : "Manali", age : "22", marks : "57" }
    19. ]
    20. });
    21. // 创建Gird
    22. Ext.create('Ext.grid.Panel', {
    23. id: 'gridId', //定义组件Id
    24. store: gridStore, //指定数据仓库
    25. stripeRows: true, //定义条纹
    26. closable: true, //可关闭
    27. draggable: true, //可拖拽
    28. collapsible: true, //定义可折叠
    29. title: '学生成绩', //Grid的面板标题
    30. width: 600, //定义宽带
    31. renderTo: Ext.getBody(),//渲染到body
    32. enableColumnMove: true, //开启列可移动
    33. enableColumnResize:true,//开启列可调整大小
    34. columns: [ //定义列
    35. { //定义行序号列
    36. xtype: 'rownumberer'
    37. },
    38. {
    39. header: "学生姓名", //定义列标题
    40. dataIndex: 'name', //定义列对应的数据列名
    41. id : 'name', //设置列Id
    42. flex: 0.5, //定义列的宽度比例
    43. sortable: true, //设置为可排序
    44. hideable: true //设置为可隐藏
    45. },
    46. {
    47. header: "年龄",
    48. dataIndex: 'age',
    49. flex: .5,
    50. sortable: true,
    51. hideable: false
    52. },
    53. {
    54. header: "分数",
    55. dataIndex: 'marks',
    56. flex: .5,
    57. sortable: true
    58. }
    59. ]
    60. });

    实例:配置列类型-模板列(templatecolumn)

    使用模板列可以实现对列的自定义格式化显示

    image

    设置列的类型为模板列

    xtype: 'templatecolumn',  //设置列类型为模板列

    配置列的tel配置项即可配置具体模板

    tpl: "{marks}分",      //配置模板

    代码:

    1. //创建数据仓库
    2. var dataStore = Ext.create('Ext.data.Store', {
    3. flelds: [
    4. "id","name","score"
    5. ],
    6. data: [
    7. {
    8. id: 666,
    9. name: 'panda',
    10. score: 99
    11. },
    12. {
    13. id: 222,
    14. name: 'dog',
    15. score: 86
    16. },
    17. {
    18. id: 111,
    19. name: 'cat',
    20. score: 76
    21. },
    22. ]
    23. });
    1. //创建Gird
    2. Ext.create('Ext.grid.Panel', {
    3. id: 'girdId666',
    4. renderTo: Ext.getBody(),
    5. store: dataStore,
    6. width: 600,
    7. closable: true,
    8. columns: [
    9. {
    10. header: '编号',
    11. dataIndex: 'id',
    12. sortable: true,
    13. flex: 0.5
    14. },
    15. {
    16. header: '姓名',
    17. dataIndex: 'name',
    18. sortable: true,
    19. flex: 1
    20. },
    21. {
    22. xtype: 'templatecolumn', //设置为模板列
    23. header: '分数',
    24. dataIndex: 'score',
    25. sortable: true,
    26. flex: 1,
    27. tpl: "{score}分"
    28. }
    29. ]
    30. });

    实例:配置列类型-数值列(numbercolumn)

    image

    设置列的类型为数值列

    xtype: 'numbercolumn',  //设置列类型为数值列

    配置列的format配置项即可

    format: '0.00',     //显示的格式 0.00

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. { name: 'name', type: 'string'},
    6. { name: 'age', type : 'int'},
    7. { name: 'marks', type : 'number'},
    8. { name: 'createDate', type: 'date' }
    9. ]
    10. });
    11. // 创建数据仓库
    12. var gridStore = Ext.create('Ext.data.Store', {
    13. model: 'StudentDataModel', //指定Model
    14. data: [ //指定内联数据
    15. { name : "Asha", age : "16", marks : "90", createDate: '2020/11/02' },
    16. { name : "Vinit", age : "18", marks : "95", createDate: '2020/11/02' },
    17. { name : "Anand", age : "20", marks : "76", createDate: '2020/11/02' },
    18. { name : "Niharika", age : "21", marks : "86", createDate: '2020/11/02' },
    19. { name : "Manali", age : "22", marks : "57", createDate: '2020/11/02' }
    20. ]
    21. });
    22. // 创建Gird
    23. Ext.create('Ext.grid.Panel', {
    24. id: 'gridId', //定义组件Id
    25. store: gridStore, //指定数据仓库
    26. stripeRows: true, //定义条纹
    27. closable: true, //可关闭
    28. draggable: true, //可拖拽
    29. collapsible: true, //定义可折叠
    30. title: '学生成绩', //Grid的面板标题
    31. width: 600, //定义宽带
    32. renderTo: Ext.getBody(),//渲染到body
    33. enableColumnMove: true, //开启列可移动
    34. enableColumnResize:true,//开启列可调整大小
    35. columns: [ //定义列
    36. { //定义行序号列
    37. xtype: 'rownumberer'
    38. },
    39. {
    40. header: "学生姓名", //定义列标题
    41. dataIndex: 'name', //定义列对应的数据列名
    42. id : 'name', //设置列Id
    43. flex: 0.5, //定义列的宽度比例
    44. sortable: true, //设置为可排序
    45. hideable: true //设置为可隐藏
    46. },
    47. {
    48. header: "年龄",
    49. dataIndex: 'age',
    50. flex: .5,
    51. sortable: true,
    52. hideable: false
    53. },
    54. {
    55. header: "分数",
    56. xtype: 'numbercolumn', //设置列类型为数值列
    57. format: '0.00', //显示的格式 0.00
    58. dataIndex: 'marks',
    59. flex: .5,
    60. sortable: true
    61. },
    62. {
    63. header: "添加日期",
    64. xtype: 'datecolumn', //设置列类型为日期列
    65. format: 'Y年m月d日', //设置日期格式
    66. dataIndex: 'createDate',
    67. flex: .5,
    68. sortable: true
    69. }
    70. ]
    71. });

    实例:配置列类型-日期列(datecolumn)

    image

    设置列的类型为数值列

    xtype: 'datecolumn',  //设置列类型为日期列

    配置列的format配置项即可

    format: 'Y年m月d日',     //显示的格式 2021年11月22日

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. { name: 'name', type: 'string'},
    6. { name: 'age', type : 'int'},
    7. { name: 'marks', type : 'number'},
    8. { name: 'createDate', type: 'date' }
    9. ]
    10. });
    11. // 创建数据仓库
    12. var gridStore = Ext.create('Ext.data.Store', {
    13. model: 'StudentDataModel', //指定Model
    14. data: [ //指定内联数据
    15. { name : "Asha", age : "16", marks : "90", createDate: '2020/11/02' },
    16. { name : "Vinit", age : "18", marks : "95", createDate: '2020/11/02' },
    17. { name : "Anand", age : "20", marks : "76", createDate: '2020/11/02' },
    18. { name : "Niharika", age : "21", marks : "86", createDate: '2020/11/02' },
    19. { name : "Manali", age : "22", marks : "57", createDate: '2020/11/02' }
    20. ]
    21. });
    22. // 创建Gird
    23. Ext.create('Ext.grid.Panel', {
    24. id: 'gridId', //定义组件Id
    25. store: gridStore, //指定数据仓库
    26. stripeRows: true, //定义条纹
    27. closable: true, //可关闭
    28. draggable: true, //可拖拽
    29. collapsible: true, //定义可折叠
    30. title: '学生成绩', //Grid的面板标题
    31. width: 600, //定义宽带
    32. renderTo: Ext.getBody(),//渲染到body
    33. enableColumnMove: true, //开启列可移动
    34. enableColumnResize:true,//开启列可调整大小
    35. columns: [ //定义列
    36. { //定义行序号列
    37. xtype: 'rownumberer'
    38. },
    39. {
    40. header: "学生姓名", //定义列标题
    41. dataIndex: 'name', //定义列对应的数据列名
    42. id : 'name', //设置列Id
    43. flex: 0.5, //定义列的宽度比例
    44. sortable: true, //设置为可排序
    45. hideable: true //设置为可隐藏
    46. },
    47. {
    48. header: "年龄",
    49. dataIndex: 'age',
    50. flex: .5,
    51. sortable: true,
    52. hideable: false
    53. },
    54. {
    55. header: "分数",
    56. xtype: 'numbercolumn', //设置列类型为数值列
    57. format: '0.00', //显示的格式 0.00
    58. dataIndex: 'marks',
    59. flex: .5,
    60. sortable: true
    61. },
    62. {
    63. header: "添加日期",
    64. xtype: 'datecolumn', //设置列类型为日期列
    65. format: 'Y年m月d日', //设置日期格式
    66. dataIndex: 'createDate',
    67. flex: .5,
    68. sortable: true
    69. }
    70. ]
    71. });

    实例:配置列类型-布尔列(booleancolumn)

    image

    设置列的xtype

    xtype: 'booleancolumn',        //设置列类型为布尔列

    设置配置项

    1. falseText: '未检查', //false显示的文本
    2. trueText: '已检查', //true显示的文本

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. { name: 'name', type: 'string'},
    6. { name: 'age', type : 'int'},
    7. { name: 'marks', type : 'number'},
    8. { name: 'isCheck', type: 'bool' },
    9. ]
    10. });
    11. // 创建数据仓库
    12. var gridStore = Ext.create('Ext.data.Store', {
    13. model: 'StudentDataModel', //指定Model
    14. data: [ //指定内联数据
    15. { name : "Asha", age : "16", marks : "90", isCheck: true },
    16. { name : "Vinit", age : "18", marks : "95", isCheck: false },
    17. { name : "Anand", age : "20", marks : "76", isCheck: true },
    18. { name : "Niharika", age : "21", marks : "86", isCheck: false },
    19. { name : "Manali", age : "22", marks : "57", isCheck: true }
    20. ]
    21. });
    22. // 创建Gird
    23. Ext.create('Ext.grid.Panel', {
    24. id: 'gridId', //定义组件Id
    25. store: gridStore, //指定数据仓库
    26. stripeRows: true, //定义条纹
    27. closable: true, //可关闭
    28. draggable: true, //可拖拽
    29. collapsible: true, //定义可折叠
    30. title: '学生成绩', //Grid的面板标题
    31. width: 600, //定义宽带
    32. renderTo: Ext.getBody(),//渲染到body
    33. enableColumnMove: true, //开启列可移动
    34. enableColumnResize:true,//开启列可调整大小
    35. columns: [ //定义列
    36. { //定义行序号列
    37. xtype: 'rownumberer'
    38. },
    39. {
    40. header: "学生姓名", //定义列标题
    41. dataIndex: 'name', //定义列对应的数据列名
    42. id : 'name', //设置列Id
    43. flex: 0.5, //定义列的宽度比例
    44. sortable: true, //设置为可排序
    45. hideable: true //设置为可隐藏
    46. },
    47. {
    48. header: "年龄",
    49. dataIndex: 'age',
    50. flex: .5,
    51. sortable: true,
    52. hideable: false
    53. },
    54. {
    55. header: "分数",
    56. xtype: 'numbercolumn', //设置列类型为数值列
    57. format: '0.00', //显示的格式 0.00
    58. dataIndex: 'marks',
    59. flex: .5,
    60. sortable: true
    61. },
    62. {
    63. header: "是否检查",
    64. xtype: 'booleancolumn', //设置列类型为布尔列
    65. falseText: '未检查', //false显示的文本
    66. trueText: '已检查', //true显示的文本
    67. dataIndex: 'isCheck',
    68. flex: .5,
    69. sortable: true
    70. }
    71. ]
    72. });

    实例:配置列类型-check列(checkcolumn)

    image

    设置列xtype

    xtype: 'checkcolumn',        //设置列类型为check列

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. { name: 'name', type: 'string'},
    6. { name: 'age', type : 'int'},
    7. { name: 'marks', type : 'number'},
    8. { name: 'isCheck', type: 'bool' },
    9. ]
    10. });
    11. // 创建数据仓库
    12. var gridStore = Ext.create('Ext.data.Store', {
    13. model: 'StudentDataModel', //指定Model
    14. data: [ //指定内联数据
    15. { name : "Asha", age : "16", marks : "90", isCheck: true },
    16. { name : "Vinit", age : "18", marks : "95", isCheck: false },
    17. { name : "Anand", age : "20", marks : "76", isCheck: true },
    18. { name : "Niharika", age : "21", marks : "86", isCheck: false },
    19. { name : "Manali", age : "22", marks : "57", isCheck: true }
    20. ]
    21. });
    22. // 创建Gird
    23. Ext.create('Ext.grid.Panel', {
    24. id: 'gridId', //定义组件Id
    25. store: gridStore, //指定数据仓库
    26. stripeRows: true, //定义条纹
    27. closable: true, //可关闭
    28. draggable: true, //可拖拽
    29. collapsible: true, //定义可折叠
    30. title: '学生成绩', //Grid的面板标题
    31. width: 600, //定义宽带
    32. renderTo: Ext.getBody(),//渲染到body
    33. enableColumnMove: true, //开启列可移动
    34. enableColumnResize:true,//开启列可调整大小
    35. columns: [ //定义列
    36. { //定义行序号列
    37. xtype: 'rownumberer'
    38. },
    39. {
    40. header: "学生姓名", //定义列标题
    41. dataIndex: 'name', //定义列对应的数据列名
    42. id : 'name', //设置列Id
    43. flex: 0.5, //定义列的宽度比例
    44. sortable: true, //设置为可排序
    45. hideable: true //设置为可隐藏
    46. },
    47. {
    48. header: "年龄",
    49. dataIndex: 'age',
    50. flex: .5,
    51. sortable: true,
    52. hideable: false
    53. },
    54. {
    55. header: "分数",
    56. xtype: 'numbercolumn', //设置列类型为数值列
    57. format: '0.00', //显示的格式 0.00
    58. dataIndex: 'marks',
    59. flex: .5,
    60. sortable: true
    61. },
    62. {
    63. header: "是否检查",
    64. xtype: 'checkcolumn', //设置列类型为check列
    65. dataIndex: 'isCheck',
    66. flex: .5,
    67. sortable: true
    68. }
    69. ]
    70. });

    实例:配置列类型-动作列(actioncolumn)

    image

    设置列类型

    xtype: 'actioncolumn',        //设置列类型为action列

    设置具体的按钮子项

    1. items: [{
    2. iconCls: 'x-fa fa-cog',
    3. tooltip: 'Edit',
    4. handler: function(grid, rowIndex, colIndex) {
    5. console.log('Config');
    6. }
    7. },{
    8. iconCls: 'x-fa fa-cog',
    9. tooltip: 'Delete',
    10. handler: function(grid, rowIndex, colIndex) {
    11. console.log('Delete');
    12. }
    13. }]

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. { name: 'name', type: 'string'},
    6. { name: 'age', type : 'int'},
    7. { name: 'marks', type : 'number'},
    8. { name: 'isCheck', type: 'bool' },
    9. ]
    10. });
    11. // 创建数据仓库
    12. var gridStore = Ext.create('Ext.data.Store', {
    13. model: 'StudentDataModel', //指定Model
    14. data: [ //指定内联数据
    15. { name : "Asha", age : "16", marks : "90", isCheck: true },
    16. { name : "Vinit", age : "18", marks : "95", isCheck: false },
    17. { name : "Anand", age : "20", marks : "76", isCheck: true },
    18. { name : "Niharika", age : "21", marks : "86", isCheck: false },
    19. { name : "Manali", age : "22", marks : "57", isCheck: true }
    20. ]
    21. });
    22. // 创建Gird
    23. Ext.create('Ext.grid.Panel', {
    24. id: 'gridId', //定义组件Id
    25. store: gridStore, //指定数据仓库
    26. stripeRows: true, //定义条纹
    27. closable: true, //可关闭
    28. draggable: true, //可拖拽
    29. collapsible: true, //定义可折叠
    30. title: '学生成绩', //Grid的面板标题
    31. width: 600, //定义宽带
    32. renderTo: Ext.getBody(),//渲染到body
    33. enableColumnMove: true, //开启列可移动
    34. enableColumnResize:true,//开启列可调整大小
    35. columns: [ //定义列
    36. { //定义行序号列
    37. xtype: 'rownumberer'
    38. },
    39. {
    40. header: "学生姓名", //定义列标题
    41. dataIndex: 'name', //定义列对应的数据列名
    42. id : 'name', //设置列Id
    43. flex: 0.5, //定义列的宽度比例
    44. sortable: true, //设置为可排序
    45. hideable: true //设置为可隐藏
    46. },
    47. {
    48. header: "年龄",
    49. dataIndex: 'age',
    50. flex: .5,
    51. sortable: true,
    52. hideable: false
    53. },
    54. {
    55. header: "分数",
    56. xtype: 'numbercolumn', //设置列类型为数值列
    57. format: '0.00', //显示的格式 0.00
    58. dataIndex: 'marks',
    59. flex: .5,
    60. sortable: true
    61. },
    62. {
    63. header: "操作",
    64. xtype: 'actioncolumn', //设置列类型为action列
    65. flex: .5,
    66. items: [{
    67. iconCls: 'x-fa fa-cog',
    68. tooltip: 'Edit',
    69. handler: function(grid, rowIndex, colIndex) {
    70. console.log('Config');
    71. }
    72. },{
    73. iconCls: 'x-fa fa-cog',
    74. tooltip: 'Delete',
    75. handler: function(grid, rowIndex, colIndex) {
    76. console.log('Delete');
    77. }
    78. }]
    79. }
    80. ]
    81. });

    实例:配置组件列

    支持的组件列类型

    Progress Bar (Ext.ProgressBarWidget or progressbarwidget)
    Slider (Ext.slider.Widget or sliderwidget)
    Sparklines (Ext.sparkline.*):
    Line (sparklineline)
    Bar (sparklinebar)
    Discrete (sparklinediscrete)
    Bullet (sparklinebullet)
    Pie (sparklinepie)
    Box (sparklinebox)
    TriState (sparklinetristate)

    实例:组件列-按钮

    列除了可以显示文本,还可以放置组件
    将列配置为组件列即可

    1. {
    2. xtype : 'widgetcolumn',
    3. flex: .5,
    4. header : 'Action',
    5. widget: {
    6. xtype : 'button',
    7. text : 'Details'
    8. }
    9. }

    实例:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. {name: 'name', mapping : 'name'},
    6. {name: 'age', mapping : 'age'},
    7. {name: 'marks', mapping : 'marks'}
    8. ]
    9. });
    10. // 定义数据
    11. var myData = [
    12. { name : "Asha", age : "16", marks : "90" },
    13. { name : "Vinit", age : "18", marks : "95" },
    14. { name : "Anand", age : "20", marks : "76" },
    15. { name : "Niharika", age : "21", marks : "86" },
    16. { name : "Manali", age : "22", marks : "57" }
    17. ];
    18. // 创建数据仓库
    19. var gridStore = Ext.create('Ext.data.Store', {
    20. model: 'StudentDataModel', //指定Model
    21. data: myData //指定内联数据
    22. });
    23. // 创建Gird
    24. Ext.create('Ext.grid.Panel', {
    25. id: 'gridId', //定义组件Id
    26. store: gridStore, //指定数据仓库
    27. stripeRows: true, //定义条纹
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. collapsible: true, //定义可折叠
    31. title: '学生成绩', //Grid的面板标题
    32. width: 700, //定义宽带
    33. renderTo: Ext.getBody(),//渲染到body
    34. enableColumnMove: true, //开启列可移动
    35. enableColumnResize:true,//开启列可调整大小
    36. columns: [ //定义列Header行
    37. {
    38. header: "学生姓名", //定义列标题
    39. dataIndex: 'name', //定义列对应的数据列名
    40. id : 'name', //设置列Id
    41. flex: 0.5, //定义列的宽度比例
    42. sortable: true, //设置为可排序
    43. hideable: true //设置为可隐藏
    44. },
    45. {
    46. header: "年龄",
    47. dataIndex: 'age',
    48. flex: .5,
    49. sortable: true,
    50. hideable: true,
    51. //自定义渲染
    52. renderer : function(value, metaData, record, rowIndex, colIndex, store,view) {
    53. //对未成年人强调显示
    54. if(value < 18)
    55. {
    56. result = '' + value + '';
    57. }
    58. else
    59. {
    60. result = value;
    61. }
    62. return result;
    63. }
    64. },
    65. {
    66. header: "分数",
    67. dataIndex: 'marks',
    68. flex: .5,
    69. sortable: true
    70. },
    71. {
    72. header: "是否优秀",
    73. dataIndex: 'marks',
    74. flex: .5,
    75. sortable: true,
    76. //自定义渲染
    77. //设置显示条件
    78. //设置分数对应等级
    79. //显示为优秀、良好、普通
    80. renderer : function (value, metadata, record, rowIndex, colIndex, store) {
    81. if (value > 85) {
    82. return '优秀';
    83. } else if(value > 75){
    84. return '良好';
    85. } else {
    86. return '普通';
    87. }
    88. }
    89. },
    90. {
    91. xtype : 'widgetcolumn',
    92. flex: .5,
    93. header : '详细信息',
    94. widget: {
    95. xtype : 'button',
    96. text : '点击查看',
    97. listeners: {
    98. click: function(btn){
    99. var rec = btn.getWidgetRecord();
    100. console.log('Widget Button clicked! - ', rec.get('Name'));
    101. }
    102. }
    103. }
    104. }
    105. ]
    106. });

    实例:组件列-折线图图形

    image

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. {name: 'name', mapping : 'name'},
    6. {name: 'age', mapping : 'age'},
    7. {name: 'marks', mapping : 'marks'},
    8. {name: 'line',type: 'auto', defaultValue: [4, 9, 12, 66, 9] }
    9. ]
    10. });
    11. // 创建数据仓库
    12. var gridStore = Ext.create('Ext.data.Store', {
    13. model: 'StudentDataModel', //指定Model
    14. data: [ //指定内联数据
    15. { name : "Asha", age : "16", marks : "90" ,line: [4, 1, 12, 66, 9] },
    16. { name : "Vinit", age : "18", marks : "95" ,line: [4, 9, 32, 66, 9] },
    17. { name : "Anand", age : "20", marks : "76" ,line: [4, 9, 12, 56, 9] },
    18. { name : "Niharika", age : "21", marks : "86" ,line: [4, 9, 12, 46, 99] },
    19. { name : "Manali", age : "22", marks : "57" ,line: [4, 9, 11, 66, 79] }
    20. ]
    21. });
    22. // 创建Gird
    23. Ext.create('Ext.grid.Panel', {
    24. id: 'gridId', //定义组件Id
    25. store: gridStore, //指定数据仓库
    26. stripeRows: true, //定义条纹
    27. closable: true, //可关闭
    28. draggable: true, //可拖拽
    29. collapsible: true, //定义可折叠
    30. title: '学生成绩', //Grid的面板标题
    31. width: 700, //定义宽带
    32. renderTo: Ext.getBody(),//渲染到body
    33. enableColumnMove: true, //开启列可移动
    34. enableColumnResize:true,//开启列可调整大小
    35. columns: [ //定义列Header行
    36. {
    37. header: "学生姓名", //定义列标题
    38. dataIndex: 'name', //定义列对应的数据列名
    39. id : 'name', //设置列Id
    40. flex: 0.5, //定义列的宽度比例
    41. sortable: true, //设置为可排序
    42. hideable: true //设置为可隐藏
    43. },
    44. {
    45. header: "年龄",
    46. dataIndex: 'age',
    47. flex: .5,
    48. sortable: true,
    49. hideable: true,
    50. },
    51. {
    52. header: "分数",
    53. dataIndex: 'marks',
    54. flex: .5,
    55. sortable: true
    56. },
    57. {
    58. xtype : 'widgetcolumn', //配置为组件列
    59. flex: .5,
    60. header : '详细信息',
    61. dataIndex: 'line',
    62. widget: {
    63. xtype: 'sparklineline' //设置为折线图
    64. }
    65. }
    66. ]
    67. });

    实例:组件列-进度条

    image

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. { name: 'name', type: 'string'},
    6. { name: 'age', type : 'int'},
    7. { name: 'marks', type : 'number'},
    8. { name: 'isCheck', type: 'bool' },
    9. { name: 'progressData', type: 'number' },
    10. ]
    11. });
    12. // 创建数据仓库
    13. var gridStore = Ext.create('Ext.data.Store', {
    14. model: 'StudentDataModel', //指定Model
    15. data: [ //指定内联数据
    16. { name : "Asha", age : "16", marks : "90", progressData: 0.15 },
    17. { name : "Vinit", age : "18", marks : "95", progressData: 0.8 },
    18. { name : "Anand", age : "20", marks : "76", progressData: 0.6 },
    19. { name : "Niharika", age : "21", marks : "86", progressData: 0.5 },
    20. { name : "Manali", age : "22", marks : "57", progressData: 0.4 }
    21. ]
    22. });
    23. // 创建Gird
    24. Ext.create('Ext.grid.Panel', {
    25. id: 'gridId', //定义组件Id
    26. store: gridStore, //指定数据仓库
    27. stripeRows: true, //定义条纹
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. collapsible: true, //定义可折叠
    31. title: '学生成绩', //Grid的面板标题
    32. width: 600, //定义宽带
    33. renderTo: Ext.getBody(),//渲染到body
    34. enableColumnMove: true, //开启列可移动
    35. enableColumnResize:true,//开启列可调整大小
    36. columns: [ //定义列
    37. { //定义行序号列
    38. xtype: 'rownumberer',
    39. align: 'left'
    40. },
    41. {
    42. header: "学生姓名", //定义列标题
    43. dataIndex: 'name', //定义列对应的数据列名
    44. id : 'name', //设置列Id
    45. flex: 0.5, //定义列的宽度比例
    46. sortable: true, //设置为可排序
    47. hideable: true //设置为可隐藏
    48. },
    49. {
    50. header: "年龄",
    51. dataIndex: 'age',
    52. flex: .5,
    53. sortable: true,
    54. hideable: false
    55. },
    56. {
    57. header: "分数",
    58. xtype: 'numbercolumn', //设置列类型为数值列
    59. format: '0.00', //显示的格式 0.00
    60. dataIndex: 'marks',
    61. flex: .5,
    62. sortable: true
    63. },
    64. {
    65. header: "个人进度",
    66. xtype: 'widgetcolumn', //定义组件列
    67. dataIndex: 'progressData',
    68. sortable: true,
    69. widget: {
    70. xtype: 'progressbarwidget', //设置为进度条类型
    71. textTpl: ['
      {percent:number("0")}%
      '
      ]
    72. }
    73. }
    74. ]
    75. });

    实例:组件列-滑动条

    image

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. { name: 'name', type: 'string'},
    6. { name: 'age', type : 'int'},
    7. { name: 'marks', type : 'number'},
    8. { name: 'isCheck', type: 'bool' },
    9. { name: 'progressData', type: 'number' },
    10. ]
    11. });
    12. // 创建数据仓库
    13. var gridStore = Ext.create('Ext.data.Store', {
    14. model: 'StudentDataModel', //指定Model
    15. data: [ //指定内联数据
    16. { name : "Asha", age : "16", marks : "90", progressData: 0.15 },
    17. { name : "Vinit", age : "18", marks : "95", progressData: 0.8 },
    18. { name : "Anand", age : "20", marks : "76", progressData: 0.6 },
    19. { name : "Niharika", age : "21", marks : "86", progressData: 0.5 },
    20. { name : "Manali", age : "22", marks : "57", progressData: 0.4 }
    21. ]
    22. });
    23. // 创建Gird
    24. Ext.create('Ext.grid.Panel', {
    25. id: 'gridId', //定义组件Id
    26. store: gridStore, //指定数据仓库
    27. stripeRows: true, //定义条纹
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. collapsible: true, //定义可折叠
    31. title: '学生成绩', //Grid的面板标题
    32. width: 600, //定义宽带
    33. renderTo: Ext.getBody(),//渲染到body
    34. enableColumnMove: true, //开启列可移动
    35. enableColumnResize:true,//开启列可调整大小
    36. columns: [ //定义列
    37. { //定义行序号列
    38. xtype: 'rownumberer',
    39. align: 'left'
    40. },
    41. {
    42. header: "学生姓名", //定义列标题
    43. dataIndex: 'name', //定义列对应的数据列名
    44. id : 'name', //设置列Id
    45. flex: 0.5, //定义列的宽度比例
    46. sortable: true, //设置为可排序
    47. hideable: true //设置为可隐藏
    48. },
    49. {
    50. header: "年龄",
    51. dataIndex: 'age',
    52. flex: .5,
    53. sortable: true,
    54. hideable: false
    55. },
    56. {
    57. header: "分数",
    58. xtype: 'numbercolumn', //设置列类型为数值列
    59. format: '0.00', //显示的格式 0.00
    60. dataIndex: 'marks',
    61. flex: .5,
    62. sortable: true
    63. },
    64. {
    65. header: "个人进度",
    66. xtype: 'widgetcolumn', //配置为组件列
    67. text: '滑动条',
    68. flex: .5,
    69. dataIndex: 'progressData',
    70. widget: {
    71. xtype: 'sliderwidget', //配置滑动条
    72. minValue: 0, //设置下限
    73. maxValue: 1, //设置上限
    74. decimalPrecision: 2, //设置精度范围
    75. listeners: {
    76. change: function(slider, value) {
    77. if (slider.getWidgetRecord)
    78. {
    79. var rec = slider.getWidgetRecord();
    80. if (rec)
    81. {
    82. rec.set('progress', value);
    83. }
    84. }
    85. }
    86. }
    87. }
    88. }
    89. ]
    90. });

    实例:组件列-饼图

    image

    代码:

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. {name: 'name', mapping : 'name'},
    6. {name: 'age', mapping : 'age'},
    7. {name: 'marks', mapping : 'marks'},
    8. {name: 'line',type: 'auto', defaultValue: [4, 9, 12, 66, 9] }
    9. ]
    10. });
    11. // 创建数据仓库
    12. var gridStore = Ext.create('Ext.data.Store', {
    13. model: 'StudentDataModel', //指定Model
    14. data: [ //指定内联数据
    15. { name : "Asha", age : "16", marks : "90" ,line: [4, 1, 12, 66, 9] },
    16. { name : "Vinit", age : "18", marks : "95" ,line: [4, 9, 32, 66, 9] },
    17. { name : "Anand", age : "20", marks : "76" ,line: [4, 9, 12, 56, 9] },
    18. { name : "Niharika", age : "21", marks : "86" ,line: [4, 9, 12, 46, 99] },
    19. { name : "Manali", age : "22", marks : "57" ,line: [4, 9, 11, 66, 79] }
    20. ]
    21. });
    22. // 创建Gird
    23. Ext.create('Ext.grid.Panel', {
    24. id: 'gridId', //定义组件Id
    25. store: gridStore, //指定数据仓库
    26. stripeRows: true, //定义条纹
    27. closable: true, //可关闭
    28. draggable: true, //可拖拽
    29. collapsible: true, //定义可折叠
    30. title: '学生成绩', //Grid的面板标题
    31. width: 700, //定义宽带
    32. renderTo: Ext.getBody(),//渲染到body
    33. enableColumnMove: true, //开启列可移动
    34. enableColumnResize:true,//开启列可调整大小
    35. columns: [ //定义列Header行
    36. {
    37. header: "学生姓名", //定义列标题
    38. dataIndex: 'name', //定义列对应的数据列名
    39. id : 'name', //设置列Id
    40. flex: 0.5, //定义列的宽度比例
    41. sortable: true, //设置为可排序
    42. hideable: true //设置为可隐藏
    43. },
    44. {
    45. header: "年龄",
    46. dataIndex: 'age',
    47. flex: .5,
    48. sortable: true,
    49. hideable: true,
    50. },
    51. {
    52. header: "分数",
    53. dataIndex: 'marks',
    54. flex: .5,
    55. sortable: true
    56. },
    57. {
    58. xtype : 'widgetcolumn', //配置为组件列
    59. flex: .5,
    60. header : '详细信息',
    61. dataIndex: 'line',
    62. widget: {
    63. xtype: 'sparklinepie' //设置为饼图
    64. }
    65. }
    66. ]
    67. });

    实例:组件列-

    代码:

    实例:组件列-

    代码:

    实例:组件列-

    代码:

    实例:组件列-

    代码:

    实例:配置单元格/行

    实例:配置单元格可以编辑

    image

    单元格编辑需要使用插件才可以完成
    添加插件:Ext.grid.plugin.CellEditing

    1. plugins: 'cellediting', //添加单元格编辑插件
    2. //还可以自己定义Ext.grid.plugin.CellEditing类型的实例
    3. plugins:[
    4. Ext.create ("Ext.grid.plugin.CellEditing", {
    5. clicksToEdit:1 //设置为点一下就进入编辑
    6. }
    7. ]

    然后在列上进行配置 editor 配置项

    1. editor: { //可编辑配置
    2. allowBlank: false, //不允许为空
    3. type: 'string' //设置数据类型
    4. }

    可以配置各种Form Filed类型,但除HtmEditor外。

    1. editor: new Ext.form.field.ComboBox({ //配置可编辑
    2. typeAhead: true,
    3. triggerAction: 'all',
    4. store: [
    5. ['Bath','Bath'],
    6. ['Kitchen','Kitchen'],
    7. ['Electronic','Electronic'],
    8. ['Food', 'Food'],
    9. ['Computer', 'Computer']
    10. ]
    11. })

    代码实例:

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. proxy: {
    14. url: '/product.json', //请求的URL
    15. type: 'ajax', //请求的类型
    16. pageSize: 35, //分页的每页数据条数
    17. reader: {
    18. type: 'json', //读取器类型
    19. rootProperty: 'data', //后端数据根节点名称
    20. totalProperty: 'total', //后端数据总条数对应节点名称
    21. }
    22. }
    23. });
    24. //定义Grid
    25. Ext.define('PandaApp.com.ProductGrid', {
    26. extend: 'Ext.grid.Panel', //继承自Grid组件
    27. title: '商品信息', //标题
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. plugins: 'cellediting', //添加单元格编辑插件
    31. renderTo: Ext.getBody(), //渲染到body
    32. width: 800, //设置宽度
    33. height: 300,
    34. store: dataStore, //关联Store
    35. dockedItems: [ //添加停靠栏
    36. {
    37. xtype: 'pagingtoolbar', //添加分页组件
    38. store: dataStore, //对应的Store
    39. dock: 'bottom', //停靠在底部
    40. displayInfo: true //显示提示信息
    41. }
    42. ],
    43. columns: [ //设置列
    44. {
    45. header: '商品编号', //设置列标题
    46. dataIndex: 'id', //设置对应的Store数据列
    47. flex: 0.5, //设置列的想对宽度
    48. hidden: true, //设置列隐藏
    49. },
    50. {
    51. header: '商品',
    52. dataIndex: 'name',
    53. flex: 1,
    54. editor: { //可编辑配置
    55. allowBlank: false, //不允许为空
    56. type: 'string' //设置数据类型
    57. }
    58. },
    59. {
    60. header: '商品类别',
    61. dataIndex: 'productType',
    62. flex: 1,
    63. editor: new Ext.form.field.ComboBox({ //配置可编辑
    64. typeAhead: true,
    65. triggerAction: 'all',
    66. store: [
    67. ['Bath','Bath'],
    68. ['Kitchen','Kitchen'],
    69. ['Electronic','Electronic'],
    70. ['Food', 'Food'],
    71. ['Computer', 'Computer']
    72. ]
    73. })
    74. },
    75. {
    76. header: '价格',
    77. dataIndex: 'price',
    78. flex: 1,
    79. renderer: function(value){ //自定义渲染
    80. return Ext.String.format("¥{0}",value);
    81. }
    82. }
    83. ]
    84. });
    85. //创建Grid实例
    86. Ext.create('PandaApp.com.ProductGrid');

    实例:配置行可编辑

    配置行可编辑需要使用Ext.grid.plugin.RowEditing插件

    plugins: ['rowediting'],  //添加行编辑插件

    在列上设置可编辑的类型即可

    1. editor: { //可编辑配置
    2. allowBlank: false, //不允许为空
    3. type: 'string' //设置数据类型
    4. }

    image

    代码:

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. proxy: {
    14. url: '/product.json', //请求的URL
    15. type: 'ajax', //请求的类型
    16. pageSize: 35, //分页的每页数据条数
    17. reader: {
    18. type: 'json', //读取器类型
    19. rootProperty: 'data', //后端数据根节点名称
    20. totalProperty: 'total', //后端数据总条数对应节点名称
    21. }
    22. }
    23. });
    24. //定义Grid
    25. Ext.define('PandaApp.com.ProductGrid', {
    26. extend: 'Ext.grid.Panel', //继承自Grid组件
    27. title: '商品信息', //标题
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. plugins: ['rowediting','cellediting'], //添加行/单元格编辑插件
    31. renderTo: Ext.getBody(), //渲染到body
    32. width: 800, //设置宽度
    33. height: 300,
    34. store: dataStore, //关联Store
    35. dockedItems: [ //添加停靠栏
    36. {
    37. xtype: 'pagingtoolbar', //添加分页组件
    38. store: dataStore, //对应的Store
    39. dock: 'bottom', //停靠在底部
    40. displayInfo: true //显示提示信息
    41. }
    42. ],
    43. columns: [ //设置列
    44. {
    45. header: '商品编号', //设置列标题
    46. dataIndex: 'id', //设置对应的Store数据列
    47. flex: 0.5, //设置列的想对宽度
    48. hidden: true, //设置列隐藏
    49. },
    50. {
    51. header: '商品',
    52. dataIndex: 'name',
    53. flex: 1,
    54. editor: { //可编辑配置
    55. allowBlank: false, //不允许为空
    56. type: 'string' //设置数据类型
    57. }
    58. },
    59. {
    60. header: '商品类别',
    61. dataIndex: 'productType',
    62. flex: 1,
    63. editor: new Ext.form.field.ComboBox({ //配置可编辑
    64. typeAhead: true,
    65. triggerAction: 'all',
    66. store: [
    67. ['Bath','Bath'],
    68. ['Kitchen','Kitchen'],
    69. ['Electronic','Electronic'],
    70. ['Food', 'Food'],
    71. ['Computer', 'Computer']
    72. ]
    73. })
    74. },
    75. {
    76. header: '价格',
    77. dataIndex: 'price',
    78. flex: 1,
    79. renderer: function(value){ //自定义渲染
    80. return Ext.String.format("¥{0}",value);
    81. },
    82. editor: { //可编辑配置
    83. allowBlank: false, //不允许为空
    84. type: 'string' //设置数据类型
    85. }
    86. }
    87. ]
    88. });
    89. //创建Grid实例
    90. Ext.create('PandaApp.com.ProductGrid');

    实例:配置列分组

    使用Ext.grid.feature.Grouping特性实现

    image

    在Grid对应的Store中设置分组使用的字段

    groupField: 'name'              //指定分组使用的字段

    在Grid中添加特性

    1. features: [ //添加特性
    2. {
    3. id: 'group', //组Id
    4. ftype: 'grouping', //开启分组
    5. groupHeaderTpl : '{name}', //组标题模板
    6. hideGroupedHeader: true, //是否显示组名称
    7. enableGroupingMenu: true, //
    8. startCollapsed: false //开启的时候默认折叠
    9. }
    10. ],

    代码:

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. proxy: {
    14. url: '/product.json', //请求的URL
    15. type: 'ajax', //请求的类型
    16. pageSize: 35, //分页的每页数据条数
    17. reader: {
    18. type: 'json', //读取器类型
    19. rootProperty: 'data', //后端数据根节点名称
    20. totalProperty: 'total', //后端数据总条数对应节点名称
    21. }
    22. },
    23. groupField: 'name' //指定分组使用的字段
    24. });
    25. //定义Grid
    26. Ext.define('PandaApp.com.ProductGrid', {
    27. extend: 'Ext.grid.Panel', //继承自Grid组件
    28. title: '商品信息', //标题
    29. closable: true, //可关闭
    30. draggable: true, //可拖拽
    31. plugins: ['rowediting','cellediting'], //添加行/单元格编辑插件
    32. renderTo: Ext.getBody(), //渲染到body
    33. width: 800, //设置宽度
    34. height: 300,
    35. store: dataStore, //关联Store
    36. dockedItems: [ //添加停靠栏
    37. {
    38. xtype: 'pagingtoolbar', //添加分页组件
    39. store: dataStore, //对应的Store
    40. dock: 'bottom', //停靠在底部
    41. displayInfo: true //显示提示信息
    42. }
    43. ],
    44. features: [ //开启分组
    45. {
    46. id: 'group', //组Id
    47. ftype: 'grouping', //
    48. groupHeaderTpl : '{name}', //组标题模板
    49. hideGroupedHeader: true, //是否显示组名称
    50. enableGroupingMenu: true //
    51. }
    52. ],
    53. columns: [ //设置列
    54. {
    55. header: '商品编号', //设置列标题
    56. dataIndex: 'id', //设置对应的Store数据列
    57. flex: 0.5, //设置列的想对宽度
    58. hidden: true, //设置列隐藏
    59. groupable: true, //是否可以用于分组
    60. },
    61. {
    62. header: '商品',
    63. dataIndex: 'name',
    64. flex: 1,
    65. groupable: true, //是否可以用于分组
    66. },
    67. {
    68. header: '商品类别',
    69. dataIndex: 'productType',
    70. flex: 1,
    71. groupable: true, //是否可以用于分组
    72. },
    73. {
    74. header: '价格',
    75. dataIndex: 'price',
    76. flex: 1,
    77. groupable: true, //是否可以用于分组
    78. }
    79. ]
    80. });
    81. //创建Grid实例
    82. Ext.create('PandaApp.com.ProductGrid');

    实例:配置分页

    实例:远程加载商品信息

    image

    后端JSON数据:

    {"data":[{"id":666,"name":"0panda","price":88.88},{"id":888,"name":"9dog","price":99.99},{"id":999,"name":"8monkey","price":77.77},{"id":123,"name":"1monkey","price":77.77},{"id":133,"name":"2monkey","price":77.77},{"id":135,"name":"3monkey","price":77.77},{"id":162,"name":"4monkey","price":77.77},{"id":173,"name":"5monkey","price":77.77},{"id":173,"name":"6monkey","price":77.77},{"id":185,"name":"7monkey","price":77.77}],"total":10}

    代码:

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. proxy: {
    14. url: '/product.json', //请求的URL
    15. type: 'ajax', //请求的类型
    16. pageSize: 35, //分页的每页数据条数
    17. reader: {
    18. type: 'json', //读取器类型
    19. rootProperty: 'data', //后端数据根节点名称
    20. totalProperty: 'total', //后端数据总条数对应节点名称
    21. }
    22. }
    23. });
    24. //定义Grid
    25. Ext.define('PandaApp.com.ProductGrid', {
    26. extend: 'Ext.grid.Panel', //继承自Grid组件
    27. title: '商品信息', //标题
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. plugins: 'gridfilters', //添加过滤插件
    31. renderTo: Ext.getBody(), //渲染到body
    32. width: 800, //设置宽度
    33. height: 300,
    34. store: dataStore, //关联Store
    35. dockedItems: [ //添加停靠栏
    36. {
    37. xtype: 'pagingtoolbar', //添加分页组件
    38. store: dataStore, //对应的Store
    39. dock: 'bottom', //停靠在底部
    40. displayInfo: true //显示提示信息
    41. }
    42. ],
    43. columns: [ //设置列
    44. {
    45. header: '商品编号', //设置列标题
    46. dataIndex: 'id', //设置对应的Store数据列
    47. flex: 0.5, //设置列的想对宽度
    48. hidden: true, //设置列隐藏
    49. },
    50. {
    51. header: '商品',
    52. dataIndex: 'name',
    53. flex: 1,
    54. filter:'string', //开启过滤。设置过滤的类型
    55. },
    56. {
    57. header: '商品',
    58. dataIndex: 'name',
    59. flex: 1,
    60. filter: { //设置列具体过滤配置
    61. type: 'string', //过滤的类型为string
    62. itemDefaults: { //具体的过滤配置项
    63. emptyText: '搜索内容' //提示文本
    64. }
    65. }
    66. },
    67. {
    68. header: '价格',
    69. dataIndex: 'price',
    70. flex: 1,
    71. renderer: function(value){ //自定义渲染
    72. return Ext.String.format("¥{0}",value);
    73. }
    74. }
    75. ]
    76. });
    77. //创建Grid实例
    78. Ext.create('PandaApp.com.ProductGrid');

    实例:使用分页工具条

    image

    1. //创建数据仓库
    2. var dataStore = Ext.create('Ext.data.Store', {
    3. pageSize: 3,
    4. flelds: [
    5. "id","name","score"
    6. ],
    7. data: [
    8. {
    9. id: 666,
    10. name: 'panda',
    11. score: 99
    12. },
    13. {
    14. id: 222,
    15. name: 'dog',
    16. score: 86
    17. },
    18. {
    19. id: 111,
    20. name: 'cat',
    21. score: 76
    22. },
    23. {
    24. id: 111,
    25. name: 'cat',
    26. score: 76
    27. },
    28. ]
    29. });
    30. //创建Gird
    31. Ext.create('Ext.grid.Panel', {
    32. id: 'girdId666',
    33. renderTo: Ext.getBody(),
    34. width: 600,
    35. closable: true,
    36. store: dataStore,
    37. resizable: true,
    38. dockedItems: [
    39. {
    40. xtype: 'pagingtoolbar',
    41. store: dataStore,
    42. dock: 'bottom',
    43. displayInfo: true
    44. }
    45. ],
    46. columns: [
    47. {
    48. header: '编号',
    49. dataIndex: 'id',
    50. sortable: true,
    51. flex: 0.5
    52. },
    53. {
    54. header: '姓名',
    55. dataIndex: 'name',
    56. sortable: true,
    57. flex: 1
    58. },
    59. {
    60. header: '分数',
    61. dataIndex: 'score',
    62. sortable: true,
    63. flex: 1,
    64. }
    65. ]
    66. });

    实例:动态加载后端数据 + 使用分页工具条

    image

    1. //创建数据模型
    2. Ext.define('Employee',{
    3. extend: 'Ext.data.Model',
    4. idProperty: 'id',
    5. fields: [
    6. { name: 'id', type: 'int' },
    7. { name: 'fullName', type: 'string' },
    8. { name: 'age', type: 'int' },
    9. { name: 'joinDateTime', type: 'date', format: 'Y-m-d' },
    10. { name: 'city', type: 'string'}
    11. ]
    12. });
    13. //创建数据仓库
    14. var baseURL = 'http://127.0.0.1:81/test.json'
    15. var dataStore = Ext.create('Ext.data.Store', {
    16. model: 'Employee', //设置对应的模型
    17. pageSize: 9, //每页显示的数据条数
    18. proxy: { //设置代理
    19. type: 'ajax', //设置代理的类型
    20. api: {
    21. create: baseURL,
    22. read: baseURL,
    23. destory: baseURL,
    24. update: baseURL,
    25. },
    26. reader: { //设置读取器
    27. type: 'json', //读取器的类型
    28. metaProperty: 'meta', //设置JSON辅助数据节点
    29. rootProperty: 'data', //设置JSON根节点
    30. idProperty: 'id', //设置数据的Id键
    31. totalProperty: 'meta.total', //设置JSON数据的总条数对应字段
    32. successProperty: 'meta.success' //设置JSON数据成功的对应字段
    33. },
    34. writer: { //设置写入器
    35. type: 'json', //设置写入器的类型
    36. encode: true, //设置是否编码
    37. writeAllFields: true, //写入记录的所有字段
    38. rootProperty: 'data', //设置JSON数据的根节点
    39. allowSingle: true, //允许
    40. }
    41. }
    42. });
    43. //加载数据
    44. dataStore.load();
    45. //创建网格
    46. var grid = Ext.create('Ext.grid.Panel', {
    47. title: '员工信息', //设置Grid标题
    48. id: 'employeeGrid1', //设置组件Id
    49. closable: true, //设置可关闭
    50. collapsible: true, //设置可折叠
    51. loadMask: true, //加载时显示遮罩
    52. draggable: true, //设置可拖拽
    53. resizable: true, //设置允许设置大小
    54. width: 700, //设置宽度
    55. store: dataStore, //设置关联的数据仓库
    56. dockedItems: [
    57. {
    58. xtype: 'pagingtoolbar',
    59. store: dataStore,
    60. dock: 'bottom',
    61. displayInfo: true
    62. }
    63. ],
    64. renderTo: Ext.getBody(),
    65. columns: [ //设置标题行
    66. {
    67. header: '编号',
    68. dataIndex: 'id',
    69. sortable: true,
    70. flex: 0.5
    71. },
    72. {
    73. header: '姓名',
    74. dataIndex: 'fullName',
    75. sortable: true,
    76. flex: 1
    77. },
    78. {
    79. header: '年龄',
    80. dataIndex: 'age',
    81. sortable: true,
    82. flex: 0.5
    83. },
    84. {
    85. header: '加入公司的日期',
    86. dataIndex: 'joinDateTime',
    87. sortable: true,
    88. flex: 1
    89. },
    90. {
    91. header: '所在城市',
    92. dataIndex: 'city',
    93. sortable: true,
    94. flex: 0.8
    95. }
    96. ]
    97. });

    实例:整体配置

    实例:配置顶部工具栏

    使用tbar配置项即可。

    image

    1. {
    2. xtype: 'gridpanel', //grid面板
    3. title: 'PandaTest',
    4. width: 600,
    5. height: 300,
    6. forceFit: true, //自动拉伸填充空白
    7. frame: true, //带边框
    8. tbar: [ //配置工具栏
    9. { xtype: 'button', text: '增加', },
    10. { xtype: 'button', text: '减少', },
    11. { xtype: 'button', text: '修改', },
    12. ],
    13. columns: [ //定义列
    14. { text: '姓名', dataIndex: 'name', },
    15. { text: '性别', dataIndex: 'sex', },
    16. { text: '年龄', dataIndex: 'age', },
    17. ],
    18. store: { //定义数据仓库
    19. data: [ //直接内联数据做测试使用
    20. {name: 'Panda', sex: '男', age: 666 },
    21. ],
    22. }
    23. }

    实例:配置选择模式

    选择模式决定了鼠标选中的模式,默认情况下,Grid使用行模式。

    image

    使用selModel配置项

    1. //使用字符串形式
    2. selModel: 'rowmodel', //选择模式
    3. selModel: 'cellmodel', //选择模式
    4. selModel: 'checkboxmodel', //选择模式
    5. //使用对象形式
    6. selModel:{
    7. selType: 'rowmodel', //选择模式
    8. mode: 'SINGLE'
    9. },
    10. //使用选择模式的具体类型实例
    11. selModel: SomeSelectModelInstance

    image

    后端测试使用的JSON

    {"data":[{"id":666,"name":"0panda","price":88.88},{"id":888,"name":"9dog","price":99.99},{"id":999,"name":"8monkey","price":77.77},{"id":123,"name":"1monkey","price":77.77},{"id":133,"name":"2monkey","price":77.77},{"id":135,"name":"3monkey","price":77.77},{"id":162,"name":"4monkey","price":77.77},{"id":173,"name":"5monkey","price":77.77},{"id":173,"name":"6monkey","price":77.77},{"id":185,"name":"7monkey","price":77.77}],"total":10}

    代码:

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. proxy: {
    14. url: '/resources/product.json', //请求的URL
    15. type: 'ajax', //请求的类型
    16. pageSize: 35, //分页的每页数据条数
    17. reader: {
    18. type: 'json', //读取器类型
    19. rootProperty: 'data', //后端数据根节点名称
    20. totalProperty: 'total', //后端数据总条数对应节点名称
    21. }
    22. }
    23. });
    24. //定义Grid
    25. Ext.define('PandaApp.com.ProductGrid', {
    26. extend: 'Ext.grid.Panel', //继承自Grid组件
    27. title: '商品信息', //标题
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. plugins: 'gridfilters', //添加过滤插件
    31. renderTo: Ext.getBody(), //渲染到body
    32. width: 800, //设置宽度
    33. height: 300,
    34. store: dataStore, //关联Store
    35. selModel: 'checkboxmodel', //选择模式~~~~~~~~~~
    36. dockedItems: [ //添加停靠栏
    37. {
    38. xtype: 'pagingtoolbar', //添加分页组件
    39. store: dataStore, //对应的Store
    40. dock: 'bottom', //停靠在底部
    41. displayInfo: true //显示提示信息
    42. }
    43. ],
    44. columns: [ //设置列
    45. {
    46. header: '商品编号', //设置列标题
    47. dataIndex: 'id', //设置对应的Store数据列
    48. flex: 0.5, //设置列的想对宽度
    49. hidden: true, //设置列隐藏
    50. },
    51. {
    52. header: '商品',
    53. dataIndex: 'name',
    54. flex: 1,
    55. filter:'string', //开启过滤。设置过滤的类型
    56. },
    57. {
    58. header: '商品',
    59. dataIndex: 'name',
    60. flex: 1,
    61. filter: { //设置列具体过滤配置
    62. type: 'string', //过滤的类型为string
    63. itemDefaults: { //具体的过滤配置项
    64. emptyText: '搜索内容' //提示文本
    65. }
    66. }
    67. },
    68. {
    69. header: '价格',
    70. dataIndex: 'price',
    71. flex: 1,
    72. renderer: function(value){ //自定义渲染
    73. return Ext.String.format("¥{0}",value);
    74. }
    75. }
    76. ]
    77. });
    78. //创建Grid实例
    79. Ext.create('PandaApp.com.ProductGrid');

    实例:配置允许多选/单选

    selModel配置项的值可以是字符串也可以是Ext.selection.Model类型的子类的实例。

    通过设置Ext.selection.Model类型的Model配置项即可设置多选/单选。

    image

    后端测试使用的JSON

    {"data":[{"id":666,"name":"0panda","price":88.88},{"id":888,"name":"9dog","price":99.99},{"id":999,"name":"8monkey","price":77.77},{"id":123,"name":"1monkey","price":77.77},{"id":133,"name":"2monkey","price":77.77},{"id":135,"name":"3monkey","price":77.77},{"id":162,"name":"4monkey","price":77.77},{"id":173,"name":"5monkey","price":77.77},{"id":173,"name":"6monkey","price":77.77},{"id":185,"name":"7monkey","price":77.77}],"total":10}

    代码:

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. proxy: {
    14. url: '/resources/product.json', //请求的URL
    15. type: 'ajax', //请求的类型
    16. pageSize: 35, //分页的每页数据条数
    17. reader: {
    18. type: 'json', //读取器类型
    19. rootProperty: 'data', //后端数据根节点名称
    20. totalProperty: 'total', //后端数据总条数对应节点名称
    21. }
    22. }
    23. });
    24. //创建选择模式
    25. //复选框选择模式
    26. var selectType = Ext.create('Ext.selection.CheckboxModel', {
    27. mode: 'SINGLE', //设置为单选
    28. });
    29. //定义Grid
    30. Ext.define('PandaApp.com.ProductGrid', {
    31. extend: 'Ext.grid.Panel', //继承自Grid组件
    32. title: '商品信息', //标题
    33. closable: true, //可关闭
    34. draggable: true, //可拖拽
    35. plugins: 'gridfilters', //添加过滤插件
    36. renderTo: Ext.getBody(), //渲染到body
    37. width: 800, //设置宽度
    38. height: 300,
    39. store: dataStore, //关联Store
    40. selModel: selectType, //设置选择模式.使用自己创建的选择模式
    41. dockedItems: [ //添加停靠栏
    42. {
    43. xtype: 'pagingtoolbar', //添加分页组件
    44. store: dataStore, //对应的Store
    45. dock: 'bottom', //停靠在底部
    46. displayInfo: true //显示提示信息
    47. }
    48. ],
    49. columns: [ //设置列
    50. {
    51. header: '商品编号', //设置列标题
    52. dataIndex: 'id', //设置对应的Store数据列
    53. flex: 0.5, //设置列的想对宽度
    54. hidden: true, //设置列隐藏
    55. },
    56. {
    57. header: '商品',
    58. dataIndex: 'name',
    59. flex: 1,
    60. filter:'string', //开启过滤。设置过滤的类型
    61. },
    62. {
    63. header: '商品',
    64. dataIndex: 'name',
    65. flex: 1,
    66. filter: { //设置列具体过滤配置
    67. type: 'string', //过滤的类型为string
    68. itemDefaults: { //具体的过滤配置项
    69. emptyText: '搜索内容' //提示文本
    70. }
    71. }
    72. },
    73. {
    74. header: '价格',
    75. dataIndex: 'price',
    76. flex: 1,
    77. renderer: function(value){ //自定义渲染
    78. return Ext.String.format("¥{0}",value);
    79. }
    80. }
    81. ]
    82. });
    83. //创建Grid实例
    84. Ext.create('PandaApp.com.ProductGrid');

    实例:整体实例

    实例:静态数据,显示学生成绩

    image

    使用stripeRows属性设置表格条纹
    使用enableColumnMove属性设置列可改变位置
    使用enableColumnResize属性设置列可改变大小

    1. // 定义Model
    2. Ext.define('StudentDataModel', {
    3. extend: 'Ext.data.Model',
    4. fields: [ //定义字段
    5. {name: 'name', mapping : 'name'},
    6. {name: 'age', mapping : 'age'},
    7. {name: 'marks', mapping : 'marks'}
    8. ]
    9. });
    10. // 定义数据
    11. var myData = [
    12. { name : "Asha", age : "16", marks : "90" },
    13. { name : "Vinit", age : "18", marks : "95" },
    14. { name : "Anand", age : "20", marks : "76" },
    15. { name : "Niharika", age : "21", marks : "86" },
    16. { name : "Manali", age : "22", marks : "57" }
    17. ];
    18. // 创建数据仓库
    19. var gridStore = Ext.create('Ext.data.Store', {
    20. model: 'StudentDataModel', //指定Model
    21. data: myData //指定内联数据
    22. });
    23. // 创建Gird
    24. Ext.create('Ext.grid.Panel', {
    25. id: 'gridId', //定义组件Id
    26. store: gridStore, //指定数据仓库
    27. stripeRows: true, //定义条纹
    28. closable: true, //可关闭
    29. draggable: true, //可拖拽
    30. collapsible: true, //定义可折叠
    31. title: '学生成绩', //Grid的面板标题
    32. width: 600, //定义宽带
    33. renderTo: Ext.getBody(),//渲染到body
    34. enableColumnMove: true, //开启列可移动
    35. enableColumnResize:true,//开启列可调整大小
    36. columns: [ //定义列Header行
    37. {
    38. header: "学生姓名", //定义列标题
    39. dataIndex: 'name', //定义列对应的数据列名
    40. id : 'name', //设置列Id
    41. flex: 0.5, //定义列的宽度比例
    42. sortable: true, //设置为可排序
    43. hideable: true //设置为可隐藏
    44. },
    45. {
    46. header: "年龄",
    47. dataIndex: 'age',
    48. flex: .5,
    49. sortable: true,
    50. hideable: false
    51. },
    52. {
    53. header: "分数",
    54. dataIndex: 'marks',
    55. flex: .5,
    56. sortable: true
    57. },
    58. {
    59. header: "是否优秀",
    60. dataIndex: 'marks',
    61. flex: .5,
    62. sortable: true,
    63. //设置显示条件
    64. //设置分数对应等级
    65. //显示为优秀、良好、普通
    66. renderer : function (value, metadata, record, rowIndex, colIndex, store) {
    67. if (value > 85) {
    68. return '优秀';
    69. } else if(value > 75){
    70. return '良好';
    71. } else {
    72. return '普通';
    73. }
    74. }
    75. }
    76. ]
    77. });

    实例:静态数据,显示工号和姓名

    image

    使用singleSelect属性设置为单选模式
    使用multiSelect属性设置为多选模式

    1. //具体的数据
    2. var testData = [
    3. ['666','Panda'],
    4. ['222','Dog'],
    5. ['888','Donkey'],
    6. ['999','Cat']
    7. ];
    8. //创建数据仓库
    9. var dataStore = Ext.create('Ext.data.ArrayStore',{
    10. data: testData,
    11. fields: [
    12. 'code',
    13. 'fullName'
    14. ]
    15. });
    16. //创建面板
    17. var grid = Ext.create('Ext.grid.Panel',{
    18. title: '员工信息', //设置标题
    19. closable: true, //设置可关闭
    20. draggable: true, //设置可拖拽
    21. collapsible: true, //设置可折叠
    22. autoHeight: true, //设置自动调整高度
    23. store: dataStore, //设置数据仓库
    24. selType: 'rowmodel', //设置选中类型
    25. singleSelect: true, //设置选中模式,仅允许单选一行
    26. renderTo: Ext.getBody(), //设置渲染到body
    27. width: 400, //设置宽度
    28. columns: [
    29. {
    30. header: '工号',
    31. dataIndex: 'code',
    32. sortable: true,
    33. flex: 1
    34. },
    35. {
    36. header: '姓名',
    37. dataIndex: 'fullName',
    38. sortable: true,
    39. flex: 2
    40. }
    41. ]
    42. });

    实例:动态加载后端数据

    image

    后端数据的格式:

    1. {
    2. "data": [{
    3. "id": 666,
    4. "fullName": "Panda",
    5. "age": 666,
    6. "joinDateTime": "2020-10-17",
    7. "city": "ShangHai"
    8. }, {
    9. "id": 222,
    10. "fullName": "Dog",
    11. "age": 888,
    12. "joinDateTime": "1997-10-17",
    13. "city": "GuangZhou"
    14. }],
    15. "meta": {
    16. "success": true,
    17. "total": 2
    18. }
    19. }

    前端代码:

    1. //创建数据模型
    2. Ext.define('Employee',{
    3. extend: 'Ext.data.Model',
    4. idProperty: 'id',
    5. fields: [
    6. { name: 'id', type: 'int' },
    7. { name: 'fullName', type: 'string' },
    8. { name: 'age', type: 'int' },
    9. { name: 'joinDateTime', type: 'date', format: 'Y-m-d' },
    10. { name: 'city', type: 'string'}
    11. ]
    12. });
    13. //创建数据仓库
    14. var baseURL = 'http://127.0.0.1:81/test.json'
    15. var dataStore = Ext.create('Ext.data.Store', {
    16. model: 'Employee', //设置对应的模型
    17. pageSize: 50, //每页显示的数据条数
    18. proxy: { //设置代理
    19. type: 'ajax', //设置代理的类型
    20. api: {
    21. create: baseURL,
    22. read: baseURL,
    23. destory: baseURL,
    24. update: baseURL,
    25. },
    26. reader: { //设置读取器
    27. type: 'json', //读取器的类型
    28. metaProperty: 'meta', //设置JSON辅助数据节点
    29. rootProperty: 'data', //设置JSON根节点
    30. idProperty: 'id', //设置数据的Id键
    31. totalProperty: 'meta.total', //设置JSON数据的总条数对应字段
    32. successProperty: 'meta.success' //设置JSON数据成功的对应字段
    33. },
    34. writer: { //设置写入器
    35. type: 'json', //设置写入器的类型
    36. encode: true, //设置是否编码
    37. writeAllFields: true, //写入记录的所有字段
    38. rootProperty: 'data', //设置JSON数据的根节点
    39. allowSingle: true, //允许
    40. }
    41. }
    42. });
    43. //加载数据
    44. dataStore.load();
    45. //创建网格
    46. var grid = Ext.create('Ext.grid.Panel', {
    47. title: '员工信息', //设置Grid标题
    48. id: 'employeeGrid1', //设置组件Id
    49. closable: true, //设置可关闭
    50. collapsible: true, //设置可折叠
    51. loadMask: true, //加载时显示遮罩
    52. draggable: true, //设置可拖拽
    53. resizable: true, //设置允许设置大小
    54. width: 700, //设置宽度
    55. store: dataStore, //设置关联的数据仓库
    56. renderTo: Ext.getBody(),
    57. columns: [ //设置标题行
    58. {
    59. header: '编号',
    60. dataIndex: 'id',
    61. sortable: true,
    62. flex: 0.5
    63. },
    64. {
    65. header: '姓名',
    66. dataIndex: 'fullName',
    67. sortable: true,
    68. flex: 1
    69. },
    70. {
    71. header: '年龄',
    72. dataIndex: 'age',
    73. sortable: true,
    74. flex: 0.5
    75. },
    76. {
    77. header: '加入公司的日期',
    78. dataIndex: 'joinDateTime',
    79. sortable: true,
    80. flex: 1
    81. },
    82. {
    83. header: '所在城市',
    84. dataIndex: 'city',
    85. sortable: true,
    86. flex: 0.8
    87. }
    88. ]
    89. });

    实例:将Grid放入到容器中

    1. //创建Store
    2. var dataStore = Ext.create('Ext.data.Store', {
    3. fields: [
    4. { name: 'id', type: 'int' },
    5. { name: 'fullName', type: 'string'}
    6. ],
    7. data: [
    8. {
    9. id: 666,
    10. fullName: 'Panda'
    11. },
    12. {
    13. id: 888,
    14. fullName: 'dog'
    15. }
    16. ]
    17. });
    18. //创建Gird
    19. var grid = Ext.create('Ext.grid.Panel', {
    20. store: dataStore,
    21. columns: [
    22. {
    23. header: '编号',
    24. dataIndex: 'id',
    25. sortable: true,
    26. flex: 1
    27. },
    28. {
    29. header: '姓名',
    30. dataIndex: 'fullName',
    31. flex: 1
    32. }
    33. ]
    34. });
    35. //创建Window容器
    36. var window = Ext.create('Ext.Window', {
    37. width: 500,
    38. heigth: 300,
    39. shadow: true,
    40. title: 'Window容器',
    41. items: [
    42. grid
    43. ]
    44. });
    45. //Windows显示
    46. window.show();

    实例:事件监听

    实例:监听多个事件

    image

    代码:

    1. // 创建数据仓库
    2. var gridStore = Ext.create('Ext.data.Store', {
    3. fields: [ //定义字段
    4. {name: 'name', mapping : 'name'},
    5. {name: 'age', mapping : 'age'},
    6. {name: 'marks', mapping : 'marks'}
    7. ],
    8. data: [ //指定内联数据
    9. { name : "Asha", age : "16", marks : "90" },
    10. { name : "Vinit", age : "18", marks : "95" },
    11. { name : "Anand", age : "20", marks : "76" },
    12. { name : "Niharika", age : "21", marks : "86" },
    13. { name : "Manali", age : "22", marks : "57" }
    14. ]
    15. });
    16. // 创建Gird
    17. Ext.create('Ext.grid.Panel', {
    18. id: 'gridId', //定义组件Id
    19. store: gridStore, //指定数据仓库
    20. stripeRows: true, //定义条纹
    21. closable: true, //可关闭
    22. draggable: true, //可拖拽
    23. collapsible: true, //定义可折叠
    24. title: '学生成绩', //Grid的面板标题
    25. width: 600, //定义宽带
    26. renderTo: Ext.getBody(),//渲染到body
    27. enableColumnMove: true, //开启列可移动
    28. enableColumnResize:true,//开启列可调整大小
    29. columns: [ //定义列Header行
    30. {
    31. header: "学生姓名", //定义列标题
    32. dataIndex: 'name', //定义列对应的数据列名
    33. id : 'name', //设置列Id
    34. flex: 0.5, //定义列的宽度比例
    35. sortable: true, //设置为可排序
    36. hideable: true //设置为可隐藏
    37. },
    38. {
    39. header: "年龄",
    40. dataIndex: 'age',
    41. flex: .5,
    42. sortable: true,
    43. hideable: false
    44. },
    45. {
    46. header: "分数",
    47. dataIndex: 'marks',
    48. flex: .5,
    49. sortable: true
    50. }
    51. ],
    52. listeners: { //定义事件监听
    53. render: { //监听渲染事件
    54. fn:function(grid, eOpts){
    55. console.log('Grid has render');
    56. }
    57. },
    58. select: { //监听选择事件
    59. fn:function(grid, record, index, eOpts){
    60. console.log('Select Event');
    61. console.log(record);
    62. console.log(index);
    63. }
    64. },
    65. itemclick:{ //监听点击事件
    66. fn:function(grid, record, item, index, event, Opts){
    67. console.log('item Click');
    68. console.log(record);
    69. console.log(item);
    70. console.log(index);
    71. console.log(event);
    72. }
    73. },
    74. itemkeydown:{ //监听键盘按下事件
    75. fn:function(grid, record, item, index, event, eOpts){
    76. //获得用户按下按钮
    77. var myKey = event.getKey();
    78. //判断按钮
    79. if ( myKey === event.DELETE ){
    80. myNewMsg = "Delete Record";
    81. } else if ( myKey == event.RETURN ){
    82. myNewMsg = "Edit customer #" + record.data.id + "";
    83. } else if (( myKey === event.N && event.shiftKey)|| myKey=== event.F8 ){
    84. myNewMsg = "Add new record";
    85. } else if (( myKey === event.D && event.shiftKey)){
    86. myNewMsg = "view detail of customer #" +
    87. record.data.id + "";
    88. } else if ( myKey ===event.F9 ){
    89. myNewMsg = "Other action...";
    90. } else {
    91. return;
    92. }
    93. console.log(myNewMsg);
    94. }
    95. }
    96. }
    97. });

    实例:数据操作

    实例:获得已选择的数据,设置需要选择的数据

    image

    使用Grid组件的getSelection()方法和setSelection()方法即可。

    后端测试使用的JSON:

    {"data":[{"id":666,"name":"0panda","price":88.88},{"id":888,"name":"9dog","price":99.99},{"id":999,"name":"8monkey","price":77.77},{"id":123,"name":"1monkey","price":77.77},{"id":133,"name":"2monkey","price":77.77},{"id":135,"name":"3monkey","price":77.77},{"id":162,"name":"4monkey","price":77.77},{"id":173,"name":"5monkey","price":77.77},{"id":173,"name":"6monkey","price":77.77},{"id":185,"name":"7monkey","price":77.77}],"total":10}

    代码:

    1. //定义商品model
    2. Ext.define('PandaApp.model.Product', {
    3. extend: 'Ext.data.Model',
    4. fields: [
    5. { name: 'id', type: 'int' },
    6. { name: 'name', type: 'string'},
    7. { name: 'price', type: 'number' }
    8. ]
    9. });
    10. //创建商品store实例
    11. var dataStore = Ext.create('Ext.data.Store', {
    12. model: 'PandaApp.model.Product',
    13. proxy: {
    14. url: '/resources/product.json', //请求的URL
    15. type: 'ajax', //请求的类型
    16. pageSize: 35, //分页的每页数据条数
    17. reader: {
    18. type: 'json', //读取器类型
    19. rootProperty: 'data', //后端数据根节点名称
    20. totalProperty: 'total', //后端数据总条数对应节点名称
    21. }
    22. }
    23. });
    24. //定义Grid
    25. Ext.define('PandaApp.com.ProductGrid', {
    26. extend: 'Ext.grid.Panel', //继承自Grid组件
    27. id: 'gridTest', //设置Id用于测试使用
    28. title: '商品信息', //标题
    29. closable: true, //可关闭
    30. draggable: true, //可拖拽
    31. plugins: 'gridfilters', //添加过滤插件
    32. renderTo: Ext.get('pandaTest'), //渲染到指定容器
    33. width: 800, //设置宽度
    34. height: 300,
    35. store: dataStore, //关联Store
    36. selModel: 'checkboxmodel', //设置选择模式
    37. gridScope: this,
    38. tbar: [ //重点在这里~~~~~~~~~~~~~~~~~
    39. {
    40. xtype: 'button',
    41. text: '获得选择的数据',
    42. handler: function () {
    43. //获得gird
    44. let grid = Ext.ComponentQuery.query('#gridTest')[0];
    45. //获得选择的数据
    46. let selectedData = grid.getSelection();
    47. //使用选择的数据
    48. console.log('Count: ' + selectedData.length)
    49. console.log(selectedData[0].get('name'));
    50. }
    51. },
    52. {
    53. xtype: 'button',
    54. text: '设置所选择的数据',
    55. handler: function () {
    56. //获得gird
    57. let grid = Ext.ComponentQuery.query('#gridTest')[0];
    58. //获得需要选中的数据
    59. let needSelectedModel1 = dataStore.first();
    60. let needSelectedModel2 = dataStore.last();
    61. //设置需要选中的数据
    62. grid.setSelection([needSelectedModel1,needSelectedModel2]);
    63. }
    64. }
    65. ],
    66. dockedItems: [ //添加停靠栏
    67. {
    68. xtype: 'pagingtoolbar', //添加分页组件
    69. store: dataStore, //对应的Store
    70. dock: 'bottom', //停靠在底部
    71. displayInfo: true //显示提示信息
    72. }
    73. ],
    74. columns: [ //设置列
    75. {
    76. header: '商品编号', //设置列标题
    77. dataIndex: 'id', //设置对应的Store数据列
    78. flex: 0.5, //设置列的想对宽度
    79. hidden: true, //设置列隐藏
    80. },
    81. {
    82. header: '商品',
    83. dataIndex: 'name',
    84. flex: 1,
    85. filter:'string', //开启过滤。设置过滤的类型
    86. },
    87. {
    88. header: '商品',
    89. dataIndex: 'name',
    90. flex: 1,
    91. filter: { //设置列具体过滤配置
    92. type: 'string', //过滤的类型为string
    93. itemDefaults: { //具体的过滤配置项
    94. emptyText: '搜索内容' //提示文本
    95. }
    96. }
    97. },
    98. {
    99. header: '价格',
    100. dataIndex: 'price',
    101. flex: 1,
    102. renderer: function(value){ //自定义渲染
    103. return Ext.String.format("¥{0}",value);
    104. }
    105. }
    106. ]
    107. });
    108. //创建Grid实例
    109. Ext.create('PandaApp.com.ProductGrid');
  • 相关阅读:
    暖通锅炉远程监控解决方案
    Txt病毒
    MySQL主从复制(基于binlog日志方式)
    报错 | Cannot find module ‘@better-scroll/core/dist/types/BScroll‘
    Spring源码:Bean生命周期(四)
    Android so库中UnsatisfiedLinkError
    【MATLAB源码-第56期】基于WOA白鲸优化算法和PSO粒子群优化算法的三维路径规划对比。
    常用排序算法详解
    leetcode-数组中的第K个最大元素-215-最大堆
    MySQL中常用的数据类型
  • 原文地址:https://blog.csdn.net/weixin_38304160/article/details/126383591