【问题标题】:Extjs - How to show combobox in Grid columnExtjs - 如何在网格列中显示组合框
【发布时间】:2013-07-17 04:33:22
【问题描述】:

我有一个包含日期和组合列的网格面板jsfiddle

但我不想点击显示我的组合。我想在不点击的情况下显示我的组合,而不是像隐藏在单元格内

日期列也一样

我想改成clicksToEdit: 0 但失败了

plugins: [
    Ext.create('Ext.grid.plugin.CellEditing', {
        clicksToEdit: 1
    })
]

怎么做,谢谢

【问题讨论】:

    标签: extjs combobox grid extjs4.1


    【解决方案1】:

    组合框或日期选择器仅在您单击单元格后才被注入,在您单击之前它们根本不存在于网格中。更改单元格外观的方法是使用列上的渲染器。 这样你就可以添加一个假的触发框作为背景图片或类似的东西。

    在回复您的评论时,您可以这样做:

    {
        xtype: 'gridcolumn',
        renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
            metaData.tdCls = 'fake-combo';
    
            return value;
        },
        text: 'MyColumn8',
        editor: {
            xtype: 'combobox',
            store: ...
        }
    }
    

    研究所有渲染器选项的docs。您可以指定不同的类以及 DomHelper 将使用的属性。 css 类可以有一个背景图像,但你必须在这里进行实验。获得与您想要做的一致的布局并不容易,但是您可以完全访问呈现到单元格中的 div。 确保使用 Firebug 或 Chrome 开发工具检查结果,它会准确地告诉你发生了什么。

    虽然您可以截取组合框并将其设置为背景图像。但最好不要尝试在渲染器中创建组合框,这不是它的工作原理。每行都有一个真正的组合框只是自定义的,如果您有很多行,可能会影响性能。

    【讨论】:

    • 但如果使用渲染器,无论如何都要返回一个组合或日期 xtype 的对象?
    • 如何将用户的选项放入该组合框中?
    【解决方案2】:

    在 4.2x 或更低版本中实现此目的的唯一方法是使用自定义组件,如 Skirtle 的共同列 http://skirtlesden.com/ux/component-column 这种列类型允许您将任意组件插入到单元格中。

    ExtJS 即将发布的版本将包含一个称为 Gadget Grid 的东西,它允许类似的功能。

    【讨论】:

      【解决方案3】:
      var grid = Ext.create('Ext.grid.Panel', {
          store: store,
          columns: [{
              header: 'Category',
              dataIndex: 'CategoryName',
              editor: {
                  xtype: 'combobox',
                  store: 'categoryStore',
                  displayField: 'CategoryName',
                  valueField: 'CategoryID'
              }
          }],
          width: 450,
          renderTo: Ext.getElementById('hede')
      });
      

      【讨论】:

      • 我如何将用户的选项放入该组合框中?
      【解决方案4】:

      试试这个链接..

      http://docs.sencha.com/extjs/5.0/components/grids/widgets_widgets_columns.html

      这是来自 Extjs 5。

      更新:

      {
          xtype: 'widgetcolumn',
          text: 'Progress',
          width: 120,
          widget: {
              xtype: 'combobox'
          }
      }
      

      这个工作就像一个魅力。

      【讨论】:

      • 这如何回答上述问题。
      • @aMazing 根据我的理解,他不喜欢单击网格单元格来显示组合框。从给定的链接签出第二个示例。
      【解决方案5】:

      好的,下面是如何在 Sencha EXTJS 中使用组合框的完整示例:

      var grid = Ext.create('Ext.grid.Panel', {
          store: store,
          columns: [{
              xtype: 'gridcolumn',
              text: 'UserStatus',
              dataIndex: 'userstatus',
              editor: {
                  xtype: 'combobox',
                  allowBlank: false,
                  displayField: 'Name',
                  valueField: 'Id',
                  queryMode: 'local',
                  store: this.getStatusChoicesStore()
              }
          }],
          width: 450,
          renderTo: Ext.getElementById('hede')
      });
      

      现在 this.getStatusChoicesStore() 函数将为我们提供此组合框的选择(您可以在任何地方定义该函数,或者只是将其内联到列定义中,对我来说它更容易如果我为它创建一个函数来阅读):

      getStatusChoicesStore: function() {
          return Ext.create('Ext.data.Store', {
              data: [{
                  Id: 0,
                  Name: "Active"
              }, {
                  Id: 1,
                  Name: "Inactive"
              }]
          });
      },
      

      此外,可以在here 找到更多信息和示例。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多