In the following example I have two datasources, one is a client only 'Testdatasource' and one is a mysql datasource. When editing and saving a record in the form, the selection in the grid gets lost with the mysql datasource but not with the local datasource. I would love to see selection kept also for mysql datasources.
Tested on SmartClient Version: SC_SNAPSHOT-2010-12-14/PowerEdition Deployment (built 2010-12-14) with GWT 2.1.0 and firefox 3.6.13
Form and grid code:
Client ds:
Server ds:
Tested on SmartClient Version: SC_SNAPSHOT-2010-12-14/PowerEdition Deployment (built 2010-12-14) with GWT 2.1.0 and firefox 3.6.13
Form and grid code:
Code:
package test.client; import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.widgets.IButton; 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.grid.ListGrid; import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler; import com.smartgwt.client.widgets.grid.events.SelectionEvent; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; public class SelectionTest implements EntryPoint { @Override public void onModuleLoad() { //First ds: will keep selection //DataSource dataSource = CustomerLocalDs.getInstance(); //Second ds: will throw away selection DataSource dataSource = DataSource.get("Customer"); final ListGrid listGrid = new ListGrid(); listGrid.setWidth100(); listGrid.setShowResizeBar(true); listGrid.setCanEdit(true); listGrid.setCanPickFields(true); listGrid.setDataSource(dataSource); listGrid.fetchData(); final DynamicForm form = new DynamicForm(); form.setDataSource(dataSource); listGrid.addSelectionChangedHandler(new SelectionChangedHandler() { @Override public void onSelectionChanged(SelectionEvent event) { form.editSelectedData(listGrid); } }); IButton save = new IButton("Save"); save.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { form.saveData(); } }); IButton doNew = new IButton("New"); doNew.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { form.editNewRecord(); } }); VLayout layout = new VLayout(); layout.addMember(listGrid); layout.addMember(form); HLayout hlayout = new HLayout(); hlayout.addMember(save); hlayout.addMember(doNew); layout.addMember(hlayout); layout.setHeight100(); layout.setWidth100(); layout.draw(); } }
Code:
package test.client; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.fields.*; import com.smartgwt.client.widgets.form.validator.FloatPrecisionValidator; import com.smartgwt.client.widgets.form.validator.FloatRangeValidator; public class CustomerLocalDs extends DataSource { private static CustomerLocalDs instance = null; public static CustomerLocalDs getInstance() { if (instance == null) { instance = new CustomerLocalDs("customerLocalDs"); } return instance; } public CustomerLocalDs(String id) { setID(id); DataSourceIntegerField pkField = new DataSourceIntegerField("cstm_pk"); pkField.setHidden(true); pkField.setPrimaryKey(true); DataSourceTextField nameField = new DataSourceTextField("cstm_name", "Name", 128, true); setFields(pkField, nameField); setClientOnly(true); setTestData(CustomerData.getRecords()); } }
Code:
package test.client; public class CustomerData { private static CustomerRecord[] records; public static CustomerRecord[] getRecords() { if (records == null) { records = getNewRecords(); } return records; } public static CustomerRecord[] getNewRecords() { return new CustomerRecord[]{ new CustomerRecord(1, "Glue Pelikan Roll-fix Permanent #950"), new CustomerRecord(2, "Glue Pelikan Roll-fix Refill Permanent #955"), new CustomerRecord(3, "Glue Pelikan Roll-fix Non Permanent #960"), new CustomerRecord(4, "Glue Pelikan Roll-fix Refill Non Permanent #965") }; } }
Code:
package test.client; import com.smartgwt.client.widgets.grid.ListGridRecord; import java.util.Date; public class CustomerRecord extends ListGridRecord { public CustomerRecord() { } public CustomerRecord(int cstm_pk, String cstm_name ){ setCstm_pk(cstm_pk); setCstm_name(cstm_name); } /** * Set the itemID. * * @param itemID the itemID */ public void setCstm_pk(int cstm_pk) { setAttribute("cstm_pk", cstm_pk); } /** * Return the itemID. * * @return the itemID */ public int getCstm_pk() { return getAttributeAsInt("cstm_pk"); } /** * Set the item. * * @param item the item */ public void setCstm_name(String cstm_name) { setAttribute("cstm_name", cstm_name); } /** * Return the item. * * @return the item */ public String getCstm_name() { return getAttribute("cstm_name"); } }
Server ds:
Code:
<DataSource serverType="sql" dbName="Mysql" tableName="Customer" ID="Customer" > <fields> <field primaryKey="true" type="sequence" name="cstm_pk" hidden="true"></field> <field type="text" length="45" name="cstm_name" title="" required="true" export="true"></field> </fields> </DataSource>
Comment