Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 如何在GXT中使用ComboBoxCell制作内联编辑列,并在GridEditing上处理其事件?_Gwt_Extjs_Gxt - Fatal编程技术网

Gwt 如何在GXT中使用ComboBoxCell制作内联编辑列,并在GridEditing上处理其事件?

Gwt 如何在GXT中使用ComboBoxCell制作内联编辑列,并在GridEditing上处理其事件?,gwt,extjs,gxt,Gwt,Extjs,Gxt,我是GXT的新手,我正在尝试在3.0.1版本上执行此操作: 我在中有一个可编辑的网格,我修改了Column的代码,该Column使用了SimplemboBox,因为我需要处理一个要显示的值和一个id,就像在普通HTML中一样,我找不到使用SimplemboBox的方法 现在我使用ComboxCell和ComboxBox来实现这一点,但我有两个问题 问题1 当表格显示时,组合列的呈现方式与内联编辑列不同(如示例中所示)。 下面是创建列的代码:(ObjectDTO仅具有id和value属性) 公共类

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

我在中有一个可编辑的网格,我修改了Column的代码,该Column使用了SimplemboBox,因为我需要处理一个要显示的值和一个id,就像在普通HTML中一样,我找不到使用SimplemboBox的方法

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

问题1 当表格显示时,组合列的呈现方式与内联编辑列不同(如示例中所示)。 下面是创建列的代码:(ObjectDTO仅具有id和value属性)

公共类MyGrid实现IsWidget{ 私人编辑专栏编辑; //创建和处理网格所需的另一个变量 公共MyGrid(){ List listColumns=new ArrayList(); sm.setSelectionMode(SelectionMode.SINGLE); //... ColumnConfig colsomeProperty=新ColumnConfig( properties.someProperty(),170,cons.gbsomePropertyTitle()); //... ComboBoxCell somePropertyCell=新ComboxCell(SomePropertyStore,新LabelProvider()){ 公共字符串getLabel(ObjectDTO项){ return item.getDescription(); } }); 添加(colSomeProperty); colSomeProperty.setCell(somePropertyCell); 最终组合框组合=新组合框(somePropertyCell); columnedition.addEditor(colSomeProperty,combo); columnEditing.addBeforeStartEditHandler(新的BeforeStartEditHandler(){ BeforestartedIt上的公共无效(BeforeStartEditEvent事件){ //处理是否允许编辑列 } }); } } 在我提出问题之前,这并不是什么大事

问题2 根据要编辑的行,我必须将网格中的某些列设置为只读。我在MyGridDTO中有一个布尔属性,它决定了我是否可以编辑这个对象。问题是:当编辑comboBox列时,没有任何gridEditingevents出现,我假设这是因为comboBox已经可见,而不是内联编辑属性后面的“隐藏”。我的意思是,由于网格已经可见,因此不再支持网格化来处理编辑事件。可能吗

现在我不知道该怎么办,因为我找不到解决办法。如果关于这方面的信息太少,或者我的研究方式不对(很可能),我就不是舒尔

有什么线索吗


PD:请为我的英语向我道歉。

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

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

第三个选项是直接将单元格添加到网格中。这将跳过任何样式或工作流更改,只允许用户按原样编辑数据(请查看以获取有关此外观的详细信息)

看起来您同时使用了第一个和第三个选项—您正在创建一个GridInlineEditing对象,并对其进行设置,但随后将ComboBoxCell添加到ColumnConfig中,从而要求网格始终在每个单元格中绘制一个ComboxBox,即使在不进行编辑时也是如此

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

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
                }
            });
    }
        
}