[SmartClient Version: v11.0p_2016-09-28/PowerEdition Deployment (built 2016-09-28)]]
This may well be related to http://forums.smartclient.com/forum/...-in-searchform, but the symptom is distinct enough that I thought it might be better for you if I opened an additional topic.
Simply stated, if I specify an editorType attribute on a field definition within a datasource definition, that editorType is ignored when a FormItem bound to that field is later rendered.
For example, take the buildinds demo code and add a line as follows right under where the datasource is set for boundForm in bindComponents():
Also, modify the definition of the status field in the Animals datasource to have an editorType attribute as follows:
Now when you run the application you will see that the editorType attribute is ignored and the control is instead rendered as a SelectItem.
The full code follows for your reference:
animals.ds.xml
*BuildInDS.java*
This may well be related to http://forums.smartclient.com/forum/...-in-searchform, but the symptom is distinct enough that I thought it might be better for you if I opened an additional topic.
Simply stated, if I specify an editorType attribute on a field definition within a datasource definition, that editorType is ignored when a FormItem bound to that field is later rendered.
For example, take the buildinds demo code and add a line as follows right under where the datasource is set for boundForm in bindComponents():
Code:
boundForm.setFields(new FormItem("status"));
Code:
<field name="status" title="Endangered Status" type="text" editorType="ComboBoxItem">
The full code follows for your reference:
animals.ds.xml
Code:
<DataSource
ID="animals"
serverType="sql"
tableName="animals"
testFileName="animals.data.xml"
>
<fields>
<field name="commonName" title="Animal" type="text"/>
<field name="scientificName" title="Scientific Name" type="text" primaryKey="true" required="true"/>
<field name="lifeSpan" title="Life Span" type="integer"/>
<field name="status" title="Endangered Status" type="text" editorType="ComboBoxItem">
<valueMap>
<value>Threatened</value>
<value>Endangered</value>
<value>Not Endangered</value>
<value>Not currently listed</value>
<value>May become threatened</value>
<value>Protected</value>
</valueMap>
</field>
<field name="diet" title="Diet" type="text"/>
<field name="information" title="Interesting Facts" type="text" length="1000"/>
<field name="picture" title="Picture" type="image" detail="true"
imageURLPrefix="/isomorphic/system/reference/inlineExamples/tiles/images/"/>
</fields>
</DataSource>
Code:
package com.smartgwt.sample.client;
import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.core.KeyIdentifier;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.types.SortArrow;
import com.smartgwt.client.util.PageKeyHandler;
import com.smartgwt.client.util.Page;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.SearchForm;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VStack;
import com.smartgwt.client.widgets.viewer.DetailViewer;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class BuiltInDS implements EntryPoint {
private ListGrid boundList;
private DynamicForm boundForm;
private IButton saveBtn;
private DetailViewer boundViewer;
private IButton newBtn;
/**
* This is the entry point method.
*/
public void onModuleLoad() {
KeyIdentifier debugKey = new KeyIdentifier();
debugKey.setCtrlKey(true);
debugKey.setKeyName("D");
Page.registerKey(debugKey, new PageKeyHandler() {
public void execute(String keyName) {
SC.showConsole();
}
});
ListGrid grid = new ListGrid();
grid.setLeft(20);
grid.setTop(75);
grid.setWidth(130);
grid.setLeaveScrollbarGap(false);
grid.setShowSortArrow(SortArrow.NONE);
grid.setCanSort(false);
grid.setFields(new ListGridField("dsTitle", "Select a DataSource"));
grid.setData(new ListGridRecord[]{
new DSRecord("Animals", "animals"),
new DSRecord("Office Supplies", "supplyItem"),
new DSRecord("Employees", "employees")}
);
grid.setSelectionType(SelectionStyle.SINGLE);
grid.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(RecordClickEvent event) {
DSRecord record = (DSRecord) event.getRecord();
bindComponents(record.getDsName());
}
});
grid.draw();
VStack vStack = new VStack();
vStack.setLeft(175);
vStack.setTop(75);
vStack.setWidth("70%");
vStack.setMembersMargin(20);
Label label = new Label();
label.setContents("<ul>" +
"<li>select a datasource from the list at left to bind to these components</li>" +
"<li>click a record in the grid to view and edit that record in the form</li>" +
"<li>click <b>New</b> to start editing a new record in the form</li>" +
"<li>click <b>Save</b> to save changes to a new or edited record in the form</li>" +
"<li>click <b>Clear</b> to clear all fields in the form</li>" +
"<li>click <b>Filter</b> to filter (substring match) the grid based on form values</li>" +
"<li>click <b>Fetch</b> to fetch records (exact match) for the grid based on form values</li>" +
"<li>double-click a record in the grid to edit inline (press Return, or arrow/tab to another record, to save)</li>" +
"</ul>");
vStack.addMember(label);
boundList = new ListGrid();
boundList.setHeight(200);
boundList.setCanEdit(true);
boundList.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(RecordClickEvent event) {
Record record = event.getRecord();
boundForm.editRecord(record);
saveBtn.enable();
boundViewer.viewSelectedData(boundList);
}
});
vStack.addMember(boundList);
boundForm = new DynamicForm(); // *** MODIFICATION #2
boundForm.setNumCols(6);
boundForm.setAutoFocus(false);
vStack.addMember(boundForm);
HLayout hLayout = new HLayout(10);
hLayout.setMembersMargin(10);
hLayout.setHeight(22);
saveBtn = new IButton("Save");
saveBtn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
boundForm.saveData();
if (!boundForm.hasErrors()) {
boundForm.clearValues();
saveBtn.disable();
}
}
});
hLayout.addMember(saveBtn);
newBtn = new IButton("New");
newBtn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
boundForm.editNewRecord();
saveBtn.enable();
}
});
hLayout.addMember(newBtn);
IButton clearBtn = new IButton("Clear");
clearBtn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
boundForm.clearValues();
saveBtn.disable();
}
});
hLayout.addMember(clearBtn);
IButton filterBtn = new IButton("Filter");
filterBtn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
boundList.filterData(boundForm.getValuesAsCriteria());
saveBtn.disable();
}
});
hLayout.addMember(filterBtn);
IButton fetchBtn = new IButton("Fetch");
fetchBtn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
boundList.fetchData(boundForm.getValuesAsCriteria());
saveBtn.disable();
}
});
hLayout.addMember(fetchBtn);
vStack.addMember(hLayout);
boundViewer = new DetailViewer();
vStack.addMember(boundViewer);
vStack.draw();
}
private void bindComponents(String dsName) {
DataSource ds = DataSource.get(dsName);
boundList.setDataSource(ds);
boundViewer.setDataSource(ds);
boundForm.setDataSource(ds);
boundForm.setFields(new FormItem("status"));
boundList.fetchData();
newBtn.enable();
saveBtn.disable();
}
}
Comment