作为网格编辑器的容器控件不会更新值

Posted

技术标签:

【中文标题】作为网格编辑器的容器控件不会更新值【英文标题】:container control as a grid editor does not update values 【发布时间】:2012-12-10 08:12:41 【问题描述】:

所以我有一个包含两列的网格,第一列只有文本,第二列需要自定义控件(带有复选框和组合框)

检查屏幕:

这是一个屏幕截图的链接:

问题

当我单击更新以更新行时。 第一列会更新,但第二列不会

我天真地将getValue() 添加到我的自定义控件中,但没有运气!! (注:我使用的是行编辑插件)

这是我的代码:

Ext.define('MainGrid', 
    extend: 'Ext.grid.Panel',
    //defs for all the toolbars and buttons
    plugins: [rowEditing],
    columns: [
                
                    xtype: 'rownumberer'
                ,
                
                    xtype: 'gridcolumn',
                    text: 'Column Titles',
                    dataIndex: 'ColumnTitle',
                    editor: 
                        xtype: 'textfield',
                    
                ,
                
                    xtype: 'gridcolumn',
                    sortable: false,
                    align: 'center',
                    dataIndex: 'IssueCondition',
                    editor: 
                        xtype: 'reportpopulation'
                    ]
);

reportpopulation 是此处的自定义控件。这是它的代码:

Ext.define('SelectPopulation', 
    extend: 'Ext.container.Container',
    itemId: 'ctrSelectpopulation',
    alias: 'widget.reportpopulation',
    layout: 
        type: 'hbox'
    ,
    initComponent: function () 
      //code to add combo box and checkbox snipped
      ....
    ,
    getValue: function () 
        //This doesn't work! 
        return "Booo";
    
);

所以点击更新不会:

我有什么遗漏吗? 我应该从 FieldBase 继承吗?我可以使用多个控件并使用 FieldBase 创建类似屏幕的东西吗?

【问题讨论】:

第一列没有绑定到任何字段(dataIndex)并且可以工作,第二列绑定到 IssueCondition 并且它不起作用...嗯...你能分享你的模型吗(或者如果没有模型则存储) @lontivero 这只是一个错字,而我正在最小化我在这里发布的代码。我更新了问题。任何猜测为什么第二列没有显示任何数据?是不是因为是容器控件? 第二列没有显示任何数据,因为它不知道如何呈现该字段的“复杂”值,请查看我的答案。 如果答案解决了您的问题,请采纳,谢谢。 【参考方案1】:

这行得通,即使您的 getValue() 工作正常,问题是您在该网格列 (IssueCondition) 上使用了自定义类型值并且没有为其指定任何渲染器,请尝试以下操作:

Ext.define('MainGrid', 
extend: 'Ext.grid.Panel',
height: 300,
plugins: [Ext.create('Ext.grid.plugin.RowEditing', 
    clicksToEdit: 1
)],
columns: [
    xtype: 'rownumberer'
, 
    xtype: 'gridcolumn',
    text: 'Column Titles',
    dataIndex: 'ColumnTitle',
    editor: 
        xtype: 'textfield'
    
, 
    xtype: 'gridcolumn',
    sortable: false,
    text: "Issue Condition",
    align: 'center',
    dataIndex: 'IssueCondition',
    width: 200,
    editor: 
        xtype: 'reportpopulation'
    ,
    renderer: function (v, attr, rec) 
        console.info(arguments);
        return 'cb: ' + rec.data.IssueCondition.cb + ' combo: ' + rec.data.IssueCondition.combo;
    
],
store: Ext.create("Ext.data.Store", 
    fields: ["ColumnTitle", "IssueCondition"],
    proxy: 
        type: "memory",
        reader: 
            type: "json"
        
    
)
);

Ext.define('SelectPopulation', 
extend: 'Ext.container.Container',
itemId: 'ctrSelectpopulation',
alias: 'widget.reportpopulation',
layout: 
    type: 'hbox'
,
initComponent: function () 
    Ext.apply(this, 
        items: [
            xtype: "checkbox"
        , 
            xtype: "combobox",
            allowBlank: false,
            store: [
                [0, 'Zero'],
                [1, 'One'],
                [2, 'Two']
            ]
        ]
    );
    this.callParent(arguments);
,
getValue: function () 
    return 
        cb: this.child('checkbox').getValue(),
        combo: this.child('combobox').getValue()
    ;

);

请注意,这只是一个示例。

Check the Fiddle here

希望这会有所帮助。

【讨论】:

以上是关于作为网格编辑器的容器控件不会更新值的主要内容,如果未能解决你的问题,请参考以下文章

Kendo Grid:外键下拉菜单在更新后不更新网格单元格

剑道网格弹出编辑器不会关闭

MudAutocomplete - 需要在编辑表单上绑定值

ExtJS 4 - 当列编辑器是组合框时如何避免网格列值变为空?

在Kendo UI网格中内联编辑?

可编辑的详细信息模板 Kendo UI 网格