1

我是 GXT 新手,我正在尝试在 3.0.1 版本上执行此操作:

我有一个基于展示示例的可编辑网格,我已经修改了使用SimpleComboBox的列的代码,因为我需要处理一个要显示的值和一个 id,就像在普通 HTML 中一样,我找不到这样做的方法这与 SimpleComboBox。

现在我使用ComboBoxCellComboBox来实现这一点,但我有两个问题。

问题#1

当表格显示时,组合列不会像内联编辑列那样呈现(如示例中的列)。下面是创建列的代码:(ObjectDTO 只有 id 和 value 属性)

public class MyGrid implements IsWidget {

private GridEditing<MyGridDTO> columnEditing;
//another variables needed to create and handle the grid


    public MyGrid(){
    
        List<ColumnConfig<MyGridDTO, ?>> listColumns = new ArrayList<ColumnConfig<MyGridDTO, ?>>();
        sm.setSelectionMode(SelectionMode.SINGLE);
        
        //...
        
        ColumnConfig<MyGridDTO, ObjectDTO> colsomeProperty = new ColumnConfig<MyGridDTO, ObjectDTO>(
                        properties.someProperty(),170,cons.gbsomePropertyTitle());  

        //...               
                
        ComboBoxCell<ObjectDTO> somePropertyCell = new ComboBoxCell<ObjectDTO>(somePropertysStore,new LabelProvider<ObjectDTO>() {
            public String getLabel(ObjectDTO item) {                
                return item.getDescripcion();
            }
            
        });
        
        listColumns.add(colSomeProperty);

        colSomeProperty.setCell(somePropertyCell); 

        final ComboBox<ObjectDTO> combo = new ComboBox<ObjectDTO>(somePropertyCell);

        columnEditing.addEditor(colSomeProperty,combo);
        columnEditing.addBeforeStartEditHandler(new BeforeStartEditHandler<MyGridDTO>() {

                public void onBeforeStartEdit(BeforeStartEditEvent<MyGridDTO> event) {
                    
                    //handle whether or not to allow column editing
                }
            });
    }
        
}

在我遇到问题 #2 之前,这没什么大不了的

问题#2

我必须根据我要编辑的行将网格中的某些列设为只读。我通过在 MyGridDTO 中拥有一个属性来做到这一点,该属性是布尔值,并确定我是否可以编辑此对象。问题是:编辑组合框列时,没有任何 gridEditingevents 上升,我认为这种行为是因为 ComboBox 已经可见并且没有“隐藏”在内联编辑属性后面。我的意思是,因为它已经可见,所以 GridEting 不再应该处理编辑事件。那可能吗?

在这一点上,我不知道该怎么做,因为我找不到解决方法。如果关于此的信息很少,或者我以错误的方式进行研究(很可能),我不确定

有什么线索吗?

PD:请为我的英语道歉。

4

1 回答 1

3

有三种方法可以设置 GXT 网格以允许可编辑行。您似乎同时使用了这三种方法中的两种,这可能是问题 1 的根源。

允许用户在网格中编辑行的主要两种方式是行内编辑和基于的编辑。有描述如何设置这些的具体示例 - 本质上,您告诉网格如何绘制数据,然后指示 *GridEditing 对象如何让用户操作数据。这两个工具都提供了额外的工作流程细节(描述开始/完成/取消编辑的事件),并在修改行/单元格时更改其样式。

第三种选择是直接将单元格添加到网格中。这会跳过任何样式或工作流程更改,只允许用户按原样编辑数据(查看cellgrid 示例以了解其外观的详细信息)。

您似乎同时使用了第一个和第三个选项 - 您正在创建一个 GridInlineEditing 对象并对其进行设置,然后将一个 ComboBoxCell 添加到 ColumnConfig,从而要求 Grid 始终在每个单元格中绘制一个 ComboBox,甚至不编辑的时候。

相反,您可能只需要默认行为(无单元格),将值绘制为字符串,或自定义 AbstractCell 子类,为您的用例进行一些特定的绘制。

于 2012-12-03T22:53:11.273 回答