как да извлечете стойността от мрежовата клетка в 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(). След това добавете предишните данни плюс новите данни, които трябва да бъдат обвързани със съответния columconfig.

След това се обадете на 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