0

我在代码中有两个 sectionstacksection,onw 显示输入数据的动态表单,第二个 sectionstacksection 显示 listgrid,当我在动态表单部分中点击保存按钮时,它将显示输入数据。

我创建了三个类,一个是扩展动态表单的 EmployeeApplicationForm,第二个是扩展 listgrid 的 EquiryList,第三个是扩展 ListGridRecord 的 getter 和 setter 的 EnquiryFormRecord。

我已经完成了获取文本框数据并调用 EnquiryFormRecord 构造函数来获取和设置“数据”变量中的数据。但我无法将这个“数据”变量访问到我的 EnquiryList 类以在 listGird 字段中访问“setData(数据)”。

我的代码是这样的。请分享您解决此问题的想法 EmployeeApplicationClass 和 EnquiryList:

class EmployeeApplicationForm extends DynamicForm {
ButtonItem saveButton;
ButtonItem resetButton;
EnquiryFormRecord[] data;
public EmployeeApplicationForm() {
    setNumCols(6);
    setWidth100();
    setHeight(135);
    setErrorOrientation(FormErrorOrientation.RIGHT);

    final TextItem fname = new TextItem("FirstName");

    final TextItem lname = new TextItem("LastName");

    saveButton = new ButtonItem("Save");
    saveButton.setStartRow(true);
    saveButton.setEndRow(false);
    resetButton = new ButtonItem("Reset");
    resetButton.setStartRow(false);
    resetButton.setEndRow(false);

    saveButton.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            // TODO Auto-generated method stub
            // if validation passes then show user an alert message box
            if (valid()) {
                SC.say("Form passed validation");
            }
            String fn = fname.getValueAsString();
            String ln = lname.getValueAsString();

            data = new EnquiryFormRecord[] { new EnquiryFormRecord(fn, ln) };
        }
    });

    resetButton.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            // TODO Auto-generated method stub
            resetForm();
        }
    });
    setFields(fname, lname, saveButton, resetButton);
}

private boolean valid() {
    return this.validate();
}

private void resetForm() {
    this.reset();
}
}


class EnquiryList extends ListGrid {
public EnquiryList(EnquiryFormRecord[] data) {
    ListGridField fname = new ListGridField("fname","First Name");
    ListGridField lname = new ListGridField("lname","Last Name");

    setFields(fname, lname);
    setData(data);------/*Hera I am getting error. I cannot access the EmployeeAppliocationForm class "data" variable here*/
    setCanEdit(true);
    setShowAllRecords(true);
    // setSortField(0);
    setAlternateRecordStyles(true);
    setCanDragRecordsOut(true);
    setHoverWidth(200);
    setHoverHeight(20);
    setSelectionType(SelectionStyle.SINGLE);
}
}
4

2 回答 2

0

我认为简短的回答是使用语法来访问封闭类变量。所以而不是setData(data)setData(EmployeeApplicationForm.this.data);

以上应该可以工作,但我不得不说它的设置方式令人困惑,应该重新工作。

于 2013-04-18T17:16:59.390 回答
0

在这种情况下,最好使用对象组合而不是继承,因为您没有在任何对象(DynamicForm、ListGrid、ListGridRecord)中扩展状态/行为。
更喜欢组合而不是继承?
为什么要使用继承?

您可以使用如下所述的对象组合。

要理解的一件事是,需要将记录添加到按钮单击/事件的网格中。
您正在尝试在屏幕初始化期间使用 setData。
相反,必须从按钮事件处理程序调用 setData(而不是 addData)。

初始化网格的方法

private ListGrid getListGrid() {
    // preparing grid fields
    ListGridField fname = new ListGridField("fname", "First Name");
    ListGridField lname = new ListGridField("lname", "Last Name");

    // creating and configuring grid
    ListGrid grid = new ListGrid();
    grid.setWidth100();
    grid.setHeight100();
    grid.setFields(fname, lname);

    return grid;
}

初始化表单的方法。必须通过网格才能添加/更新按钮事件的记录。

private DynamicForm getDynamicForm(final ListGrid grid) {
    // preparing form items
    final TextItem fname = new TextItem("firstName", "First Name"); // its better to explicitly specify both name and title
    final TextItem lname = new TextItem("lastName", "Last Name");

    ButtonItem saveButton = new ButtonItem("Save");
    saveButton.setStartRow(true);
    saveButton.setEndRow(false);
    saveButton.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent clickEvent) {
            String fn = fname.getValueAsString();
            String ln = lname.getValueAsString();

            Record record = new Record();
            record.setAttribute("fname", fn); // record attribute names must match grid field name
            record.setAttribute("lname", ln);

            grid.addData(record); // addData should be used to add new records per save operation

            // setData should be used to set all records in grid per save operation
            // in this case, its probably not what is required, as this will overwrite previous records in grid
            // resulting, only one record left in grid after every save operation
            // grid.setData(new Record[]{record});
        }
    });

    // creating and configuring form
    DynamicForm form = new DynamicForm();
    form.setWidth100();
    form.setHeight(135);
    form.setNumCols(6);
    form.setErrorOrientation(FormErrorOrientation.RIGHT);
    form.setFields(fname, lname, saveButton);

    return form;
}

把它放在一起

ListGrid grid = getListGrid();
DynamicForm form = getDynamicForm(grid);
...
formSection.setItems(form);
...
gridSection.setItems(grid);
...
sections.setSections(formSection, gridSection);
于 2013-04-23T21:59:40.973 回答