如何在Ext 4网格面板中仅启用新行?

时间:2011-06-30 20:32:04

标签: extjs4 gridpanel

所以我有ExtJs 4 Grid Panel有两列。

ONE 是带有自定义渲染器的ComboBox

Ext.ux.comboBoxRenderer = function(combo) {
    return function(value) {
        var idx = combo.store.find(combo.valueField, value);
        var rec = combo.store.getAt(idx);

        return (rec == null ? '<img src="/js/extjs4/resources/themes/images/default/grid/loading.gif" />' : rec.get(combo.displayField) );
    };
}

TWO 是数字列

{
  allowBlank: false,
  header: 'Time',
  dataIndex: 'tedPaidTime',
  align: 'right',
  field: {
     xtype: 'numberfield',
     allowBlank: false,
     minValue: 0,
     maxValue: 100000
  },
  flex: 0.20,
  selectOnFocus:true
}

现在,当我加载DataStore时,我希望 FIRST 列只读。如果我设置ReadOnly标志,这很容易。

但是,我有一个按钮,可以将 NEW 记录添加到商店,我希望新记录不具有只读标志。

所以基本上,一旦你改变第一列并保存,你就无法改变它。只能在保存之前更改新记录。

此处的业务规则要求他们删除旧记录,如果它不正确。

感谢。

1 个答案:

答案 0 :(得分:0)

我自己能够解决这个问题。

基本上,我在selectionchange事件中记录了组合。 然后,在focus事件中,我检查了它是否具有来自商店的必需数据密钥。如果没有,那么我假设一个新行并运行以下内容:

focus: function(combo) {
           var cb = combo;
           if(newTEDetailRecord) {
              if(newTEDetailRecord.data["activityKey"] == "") {
                 console.log("newTEDetailRecord", newTEDetailRecord);
                 cb.setEditable(true);
                 cb.setReadOnly(false);
                 cb.focus();
                 cb.selectText();
              } else {
                 cb.setReadOnly(true);
              }
           }
        },