как получить значение из ячейки сетки в GXT

Я создал редактируемую сетку, в которой только 3 столбца из 5 доступны для редактирования. Я не понимаю, как извлекать значения из определенных ячеек, чтобы значения можно было динамически добавлять и отображать внутри другой ячейки той же сетки. Я пробовал этот код в eclipse galileo. Но это не работает. Помогите пожалуйста мне.

package org.openxdata.analyzer.client;

import java.util.ArrayList;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;  
import com.google.gwt.user.client.Element;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;  
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;  
import java.util.List;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.Window;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.TextField;  
import com.extjs.gxt.ui.client.widget.grid.CellEditor;  
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;  
import com.extjs.gxt.ui.client.widget.layout.FitLayout;  
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.data.BaseModel;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.form.NumberField;


public class Grid1 extends Viewport {

    @Override
    protected void onRender(Element parent, int index) {
        super.onRender(parent, index);
        setStyleAttribute("margin", "10px");



        final Window w = new Window();
        w.setHeading("grids");
        w.setSize(600,250);
        w.setModal(true);
        //w.setLayout(new RowLayout(Orientation.VERTICAL)); 
        w.setLayout(new FitLayout());
        w.setResizable(false);

        FormData formData = new FormData("98%");


        List<ColumnConfig> col = new ArrayList<ColumnConfig>();
        ColumnConfig column = new ColumnConfig();
        column.setId("disease");
        column.setWidth(150);
        TextField<String> text = new TextField<String>();    
        text.setAllowBlank(false);    
        text.setAutoValidate(true);    
        //column.setEditor(new CellEditor(text));  
        col.add(column);


        column = new ColumnConfig();
        column.setId("exposure");
        column.setWidth(120);
        TextField<String> text1 = new TextField<String>();    
        text1.setAllowBlank(false);    
        text1.setAutoValidate(true);    
        //column.setEditor(new CellEditor(text1));  
        col.add(column);

        column = new ColumnConfig();
        column.setId("plus");
        column.setHeader("Exposure");
        column.setWidth(80);
    final NumberField text2 = new NumberField();    
        text2.setAllowBlank(false);    
        text2.setAutoValidate(true);    
        column.setEditor(new CellEditor(text2));  
        col.add(column);

        column = new ColumnConfig();
        column.setId("minus");
        column.setHeader("Exposure");
        column.setWidth(80);
        final NumberField text3 = new NumberField();   
        text3.setAllowBlank(false);    
        text3.setAutoValidate(true);    
        column.setEditor(new CellEditor(text3));  
        col.add(column);

        column = new ColumnConfig();
        column.setId("total");
        column.setHeader("Totals");
        column.setWidth(80);
        final NumberField text4 = new NumberField();      
        text4.setAllowBlank(false);    
        text4.setAutoValidate(true);    
        column.setEditor(new CellEditor(text4));  
        column.setAlignment(HorizontalAlignment.RIGHT);
        col.add(column);
        //ColumnModel cm = new ColumnModel(col);

        ListStore<Grid2> employeeList = new ListStore<Grid2>();    
        employeeList.add(cool.getgrid());


        ColumnModel cm = new ColumnModel(col);  


        final EditorGrid<Grid2> grid = new EditorGrid<Grid2>(employeeList, cm);  
        //grid.setStyleAttribute("borderTop", "none");  
        //grid.setAutoExpandColumn("name");  
        grid.setBorders(true);  
        grid.setStripeRows(true);  
          Button calculate = new Button("Calculate");
            w.addButton(calculate);



            calculate.addSelectionListener( new SelectionListener<ButtonEvent>()

                    {


                 @Override  
                    public void componentSelected(ButtonEvent ce) {  
                    {   

                        Double   p=(Double)text2.getValue();
                        Double m=(Double)text3.getValue();


                        Double t=p+m;

                        text4.setValue(t);

                        }  
                 }

                    });



        w.add(grid);
        w.show();
    }
}


class Grid2 extends BaseModel {
    private static final long serialVersionUID = 1L;
    public Grid2(){
    }
    public Grid2  ( String  dis, String exp, Integer x,Integer y) {
        set("disease", dis);
        set("exposure", exp);
        set("plus", x);
        set("minus", y);
    }

    public Grid2 (String  dis, String exp, Integer x,
            Integer y, Double v) {
        // this(dis, exp, x,y,v);
        set("disease", dis);
        set("exposure", exp);
        set("plus", x);
        set("minus", y);
        set("total", v);
    }
    public Grid2(String a,String b,String c,String d,String t){
        set("disease",a);
        set("exposure",b);
        set("plus",c);
        set("minus",d);
        set("total",t);
    }
    public  Integer getplus() {
        return (Integer)get("plus");
    }
    public Integer getminus() {
        return (Integer)get("minus");
    }


    public class TestData {  

        public  List<Grid2> getData()  
        {  
            List<Grid2> lt= new ArrayList<Grid2>();  



            lt.add(new Grid2("Christina Blake","Information Technology",1,2,1.23));  
            lt.add(new Grid2("Heriberto Rush","Information Technology",3,4,1.334));  

            return lt;  
        }  
    }  

}

class cool {  

    public static  List<Grid2> getgrid()  
    {  
        List<Grid2> data = new ArrayList<Grid2>();  

        //data.add(new Grid(" "," ","Exposure"," ","Totals"));  
        data.add(new Grid2(" "," ","(+)","(-)"," "));  
        data.add(new Grid2("'Disease'","(+)",0,0,0.00));  
        data.add(new Grid2(" ","(-)",0,0,0.00));  
        data.add(new Grid2("Totals"," ",0,0,0.00));  


        return data;  
    }  

}

person Keerthi Ng    schedule 24.02.2011    source источник


Ответы (4)


Если вы изменяете любую редактируемую ячейку, вы можете получить store.getModifiedRecords(). Это даст вам измененные записи. Эта запись может дать вам изменения, внесенные в запись. Я думаю, что есть метод record.getChanges(), который вернет вам карту для этой модели (записи). В то время каждая модель, представляющая row.u, может получить номер ячейки, который изменяется как ключ, и соответствующее ему значение.

После этого вы можете сделать store.removeAll(). Затем добавьте предыдущие данные и новые данные, которые необходимо связать с соответствующим файлом конфигурации столбца.

Затем позвоните store.add(List of models containing whole data). Затем grid.recalculate();

person Deepak Baloni    schedule 26.09.2011

Добавьте StoreListener в ListStore за сеткой. Обработайте событие обновления, и все готово.

person Tony BenBrahim    schedule 26.02.2011
comment
Спасибо за ответ. я не понимаю как это сделать, не могли бы вы скинуть мне фрагмент кода... - person Keerthi Ng; 27.02.2011

Это поможет вам. Я получаю значение этого:

GridCellRenderer<Grid2> checkStatus = new GridCellRenderer<Grid2>() {
    public Object render(Grid2 model, String property,
            ColumnData config, int rowIndex, int colIndex,
            ListStore<Grid2> store, Grid<Grid2> grid) {
        int val = model.get(property);
        return val;
    }
};
person Dhruvesh    schedule 12.05.2011

Это работает для gxt 2.x. store.getModifiedRecords().get(0).getChanges() — возвращает карту с именем поля в качестве ключа и старым значением ячейки в качестве значения карты. store.getModifiedRecords().get(0).get("field_name") возвращает новое значение в виде строки

person Oleksandr H    schedule 25.12.2013