Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

  • chetan.phanse
    replied
    Originally posted by mnenchev
    Well, you are right for the 2). But i want to keep in the list grid only records that pass where clause for example booleanFoo = true (in the database). And if the user uncheck booleanFoo for 3 records and pres update their booleanFoo is updated in the database and they are removed from the list grid why should i force new fetch if i know what i updated and what i should remove from the listgrid. The application is admin iterface that will not be used from 2 or more user simultaneously, so making new fetch is unneeded.
    Any response on this one?

    Leave a comment:


  • mnenchev
    replied
    Code:
    // news days data source
    
    
    public class NewsDaysDataSource extends GenericGwtRpcDataSource<NewsDayDTO> {
    
    	private static NewsDaysDataSource instance = null;
    	private static Object sync = new Object();
    
    	public static NewsDaysDataSource getInstance() {
    		if (instance == null) {
    			synchronized (sync) {
    				if (instance == null) {
    					instance = new NewsDaysDataSource();
    				}
    			}
    		}
    		return instance;
    	}
    
    	private DataSourceIntegerField pk;
    	private DataSourceField assetField;
    	private DataSourceDateField dateField;
    	private DataSourceField intervalField;
    
    	public NewsDaysDataSource() {
    		setClientOnly(true);
    
    		pk = new DataSourceIntegerField("id", "News Day Id");
    		pk.setPrimaryKey(true);
    		pk.setHidden(true);
    		addField(pk);
    
    		assetField = new DataSourceIntegerField("assetId");
    		assetField.setCanEdit(true);
    		assetField.setEditorType(new WebSelectItem(AssetJsonDataSource.getInstance()));
    		assetField.setForeignKey("assetsDS.key");
    		assetField.setRequired(true);
    		addField(assetField);
    		dateField = new DataSourceDateField("date", "Date");
    		final DateRangeValidator validator = new DateRangeValidator();
    		validator.setMin(new Date());
    		dateField.setRequired(true);
    		dateField.setValidators(validator);
    		addField(dateField);
    		intervalField = new DataSourceIntegerField("interval", "Interval");
    		final IntegerRangeValidator integerValidator = new IntegerRangeValidator();
    		integerValidator.setMin(0);
    		intervalField.setValidators(integerValidator);
    		intervalField.setRequired(true);
    		addField(intervalField);
    	}
    
    	@Override
    	protected void executeAdd(final String requestId, final DSRequest request, final DSResponse response) {
    		final JavaScriptObject data = request.getData();
    		final ListGridRecord rec = new ListGridRecord(data);
    		final NewsDayDTO dto = new NewsDayDTO();
    		dto.setDate(rec.getAttributeAsDate("date"));
    		dto.setAssetId(rec.getAttributeAsInt("assetId"));
    		dto.setInterval(rec.getAttributeAsInt("interval"));
    		final NewsDayServiceAsync service = ServiceUtils.getNewsDayServiceAsync();
    		service.addNewsDay(dto, new AsyncCallback<Integer>() {
    			@Override
    			public void onSuccess(Integer id) {
    				rec.setAttribute("id",id);
    				request.setData(rec.getJsObj());
    				processResponse(requestId, response);
    			}
    
    			@Override
    			public void onFailure(Throwable e) {
    				response.setStatus(RPCResponse.STATUS_FAILURE);
    				processResponse(requestId, response);
    				SC.warn("Error adding News Day : " + e.getMessage(), null);
    			}
    		});
    
    	}
    @Override
    	protected void executeFetch(final String requestId, DSRequest request, final DSResponse response) {
    		final Integer assetId = request.getAttributeAsInt("assetId");
    		if (assetId == null) {
    			return;
    		}
    		final NewsDayServiceAsync service = ServiceUtils.getNewsDayServiceAsync();
    		service.getNewsDaysByAssetId(assetId, new AsyncCallback<List<NewsDayDTO>>() {
    			@Override
    			public void onSuccess(List<NewsDayDTO> data) {
    				final ListGridRecord[] records = new ListGridRecord[data.size()];
    				for (int i = 0; i < data.size(); i++) {
    					final ListGridRecord r = new ListGridRecord();
    					copyValues(data.get(i), r);
    					records[i] = r;
    				}
    				response.setData(records);
    				processResponse(requestId, response);
    			}
    
    			@Override
    			public void onFailure(Throwable e) {
    				response.setStatus(RPCResponse.STATUS_FAILURE);
    				processResponse(requestId, response);
    			}
    		});
    	}
    
    	@Override
    	protected void executeRemove(final String requestId, DSRequest request, final DSResponse response) {
    		final JavaScriptObject data = request.getData();
    		final ListGridRecord rec = new ListGridRecord(data);
    		final int id = rec.getAttributeAsInt("id");
    		final NewsDayServiceAsync service = ServiceUtils.getNewsDayServiceAsync();
    		service.deleteNewsDay(id, new AsyncCallback<Void>() {
    			@Override
    			public void onSuccess(Void data) {
    				final ListGridRecord[] list = new ListGridRecord[1];
    				list[0] = rec;
    				response.setData(list);
    				processResponse(requestId, response);
    			}
    
    			@Override
    			public void onFailure(Throwable e) {
    				response.setStatus(RPCResponse.STATUS_FAILURE);
    				processResponse(requestId, response);
    				SC.warn("Error deleting News Day: " + e.getMessage(), null);
    			}
    		});
    	}
    
    	@Override
    	protected void executeUpdate(String requestId, DSRequest request, DSResponse response) {
    
    	}
    
    	@Override
    	protected Object getValueOf(NewsDayDTO from, String fieldName) {
    		if (pk.getName().equals(fieldName)) {
    			return from.getId();
    		} else if (dateField.getName().equals(fieldName)) {
    			return from.getDate();
    		} else if (intervalField.getName().equals(fieldName)) {
    			return from.getInterval();
    		} else if (assetField.getName().equals(fieldName)) {
    			return from.getAssetId();
    		}
    		return null;
    	}
    }
    This I do receive data from RPC service, but i have callback that says how to transform the data coming from the rpc in json. I the assets select item that is not part from the dynamic form, but serves as a filter for the grid everything works, the assets are loaded as key/value. May be the problem is in the data presentation( json?)
    The addeditDialog is just a window that displays the form.
    Do you need the RPC implementations?
    Regards.

    Leave a comment:


  • mnenchev
    replied
    Code:
    // view code: one SelectItems filled with assets and one grid, that shows all // news days for the selected asset
    
    public class NewsDayPanel extends VLayout {
    	private static final String DESCRIPTION = "News Days";
    
    	public static class Factory implements PanelFactory {
    
    		private String id;
    
    		public Canvas create() {
    			final NewsDayPanel panel = new NewsDayPanel();
    			id = panel.getID();
    			return panel;
    		}
    
    		public String getID() {
    			return id;
    		}
    
    		public String getDescription() {
    			return DESCRIPTION;
    		}
    	}
    
    	private ListGrid grid;
    	private SelectItem assets;
    	private AddEditDialog addEditDialog;
    
    	public NewsDayPanel() {
    		this.setWidth100();
    		this.setHeight100();
    		this.setMembersMargin(10);
    
    		// init grid
    		grid = new ListGrid();
    		grid.setAlternateRecordStyles(true);
    		grid.setWidth(600);
    		grid.setHeight(400);
    		grid.setAutoFitData(Autofit.VERTICAL);
    		grid.setAutoFitMaxRecords(15);
    		grid.setShowAllRecords(true);
    		grid.setEditEvent(ListGridEditEvent.CLICK);
    		grid.setDataSource(NewsDaysDataSource.getInstance());
    		grid.setAlign(Alignment.CENTER);
    		grid.setSelectionType(SelectionStyle.SINGLE);
    		final ListGridField id = new ListGridField("id", "NewsDay Id");
    		final ListGridField date = new ListGridField("date", "Date");
    		grid.setDateFormatter(DateDisplayFormat.TOEUROPEANSHORTDATE);
    		final ListGridField interlval = new ListGridField("interval", "Interval");
    		final DynamicForm form = new DynamicForm();
    		grid.setFields(id, date, interlval);
    		form.setWidth(500);
    		form.setNumCols(2);
    
    		// init assets
    		assets = new SelectItem("Assets");
    		assets.setDefaultToFirstOption(false);
    		assets.setDisplayField("value");
    		assets.setValueField("key");
    		assets.setOptionDataSource(AssetJsonDataSource.getInstance());
    		assets.addChangedHandler(new ChangedHandler() {
    			@Override
    			public void onChanged(ChangedEvent event) {
    				loadUserData();
    
    			}
    		});
    
    		form.setFields(assets);
    		this.addMember(form);
    		this.addMember(grid);
    
    		// add edit form
    		final DynamicForm newsDayForm = new DynamicForm();
    		newsDayForm.setDataSource(NewsDaysDataSource.getInstance());
    		// init buttons
    		final IButton newButton = new IButton("New");
    		newButton.addClickHandler(new ClickHandler() {
    			@Override
    			public void onClick(ClickEvent event) {
    				if (addEditDialog == null) {
    					addEditDialog = new AddEditDialog(newsDayForm, new BooleanCallback() {
    						@Override
    						public void execute(Boolean value) {
    							if (value) {
    								if (newsDayForm.validate()) {
    									newsDayForm.saveData(new DSCallback() {
    									
    										@Override
    										public void execute(DSResponse response, Object rawData, DSRequest request) {
    											final Record rec = new Record(request.getData());
    												if (rec.getAttributeAsInt("assetId") != (Integer) assets.getValue()) {
    													loadUserData();
    												}
    										}
    									});
    									addEditDialog.hide();
    								}
    							} else {
    								addEditDialog.hide();
    							}
    						}
    					});
    					addEditDialog.setHeight(150);
    					addEditDialog.setWidth(500);
    				}
    				addEditDialog.showForAdd();
    			}
    		});
    
    		final IButton deleteButton = new IButton("Delete");
    		deleteButton.setLeft(110);
    		deleteButton.addClickHandler(new ClickHandler() {
    			@Override
    			public void onClick(ClickEvent event) {
    				final ListGridRecord selectedRecord = grid.getSelectedRecord();
    				if (selectedRecord != null) {
    					grid.removeData(selectedRecord);
    				} else {
    					SC.warn("Select a News Day first!", null);
    				}
    			}
    		});
    
    		// final IButton cancelButton = new IButton("Cancel");
    		// cancelButton.setLeft(220);
    		// cancelButton.addClickHandler(new ClickHandler() {
    		// @Override
    		// public void onClick(ClickEvent event) {
    		// grid.discardAllEdits();
    		// }
    		// });
    
    		final HLayout buttons = new HLayout();
    		buttons.setMembersMargin(210);
    		buttons.addChild(newButton);
    		buttons.addChild(deleteButton);
    
    		this.addMember(buttons);
    	}
    
    	private void loadUserData() {
    		grid.invalidateCache();
    		final Integer assetId = (Integer) assets.getValue();
    		if (assetId == null) {
    			return;
    		}
    
    		final DSRequest request = new DSRequest();
    		request.setAttribute("assetId", assetId);
    		grid.fetchData(null, null, request);
    	}
    }
    
    // assets data source
    
    public class AssetJsonDataSource extends BaseKeyValueDataSource {
    
    
    	private static AssetJsonDataSource instance = null;
    	private static Object sync = new Object();
    	
    	public static AssetJsonDataSource getInstance() {
    		if (instance == null) {
    			synchronized (sync) {
    				if (instance == null) {
    					instance = new AssetJsonDataSource();
    				}
    			}
    		}
    		return instance;
    	}
    	
    	public AssetJsonDataSource() {
    		super();
    		this.setID("assetsDS");
    	}
    	
    	@Override
    	protected void executeAdd(String requestId, DSRequest request, DSResponse response) {
    		
    	}
    
    	@Override
    	protected void executeFetch(final String requestId, DSRequest request, final DSResponse response) {
    		final AssetServiceAsync service = ServiceUtils.getAssetServiceAsync();
    		service.getAssetsMap(new KeyValueJsonAsyncCallback() {
    			@Override
    			public void responseFailure(Throwable e) {
    				SC.warn("ERROR : " + e.getMessage(), null);
    				response.setStatus(RPCResponse.STATUS_FAILURE);
    				processResponse(requestId, response);
    			}
    			@Override
    			public void responseSuccess(Record[] records) {
    				response.setData(records);
    				processResponse(requestId, response);				
    			}
    
    		});
    	}
    
    	@Override
    	protected void executeRemove(String requestId, DSRequest request, DSResponse response) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	protected void executeUpdate(String requestId, DSRequest request, DSResponse response) {
    		// TODO Auto-generated method stub
    		
    	}
    	
    	@Override
    	protected Object getValueOf(String from, String fieldName) {
    		return null;
    	}
    
    
    }
    
    // key-value data source
    public abstract class BaseKeyValueDataSource  extends GenericGwtRpcDataSource<String> {
    
    	protected DataSourceIntegerField key;
    	protected DataSourceField value;
    	
    	public BaseKeyValueDataSource() {
    		key = new DataSourceIntegerField("key");
    		key.setHidden(true);
    		key.setPrimaryKey(true);
    		addField(key);
    		value = new DataSourceTextField("value");
    		addField(value);
    		setClientOnly(true);
    	}
    }
    
    // key - value callback
    public abstract class KeyValueJsonAsyncCallback implements AsyncCallback<List<String>> {
    
    		@Override
    		public void onSuccess(List<String> data) {
    			final Record[] records = new Record[data.size()];
    			int i = 0;
    			for(final String json : data) {
    				final JSONObject obj = (JSONObject) JSONParser.parse(json);
    				final Record r = new Record(obj.getJavaScriptObject());
    				records[i++] = r;
    			}
    			responseSuccess(records);
    		}
    		
    		@Override
    		public void onFailure(Throwable e) {
    			responseFailure(e);
    		}
    
    		public abstract void responseSuccess(Record[] records);
    		public abstract void responseFailure(Throwable e);
    }

    Leave a comment:


  • gcstang
    replied
    Originally posted by mnenchev
    I do not have deployable sample at the moment but here is the code connected with the problem:
    I have asset:newsDays one to many relationship
    Code:
    //view
    	
    		final DynamicForm newsDayForm = new DynamicForm();
    		newsDayForm.setDataSource(NewsDaysDataSource.getInstance());
    
    // newsDaysDS
    	public NewsDaysDataSource() {
    		setClientOnly(true);
    
    		pk = new DataSourceIntegerField("id", "News Day Id");
    		pk.setPrimaryKey(true);
    		pk.setHidden(true);
    		addField(pk);
    
    		assetField = new DataSourceIntegerField("assetId");
    		assetField.setCanEdit(true);
    		assetField.setEditorType(new WebSelectItem(AssetJsonDataSource.getInstance()));
    		assetField.setForeignKey("assetsDS.key");
    		assetField.setRequired(true);
    		addField(assetField);
    		dateField = new DataSourceDateField("date", "Date");
    		final DateRangeValidator validator = new DateRangeValidator();
    		validator.setMin(new Date());
    		dateField.setRequired(true);
    		dateField.setValidators(validator);
    		addField(dateField);
    		intervalField = new DataSourceIntegerField("interval", "Interval");
    		final IntegerRangeValidator integerValidator = new IntegerRangeValidator();
    		integerValidator.setMin(0);
    		intervalField.setValidators(integerValidator);
    		intervalField.setRequired(true);
    		addField(intervalField);
    	}
    
    // AssetDS
    protected DataSourceIntegerField key;
    	protected DataSourceField value;
    	
    	public AssetJsonDataSource() {
    		key = new DataSourceIntegerField("key");
    		key.setHidden(true);
    		key.setPrimaryKey(true);
    		addField(key);
    		value = new DataSourceTextField("value");
    		addField(value);
    		setClientOnly(true);
    		this.setID("assetsDS");
    	}
    	
    	@Override
    	protected void executeAdd(String requestId, DSRequest request, DSResponse response) {
    		
    	}
    
    	@Override
    	protected void executeFetch(final String requestId, DSRequest request, final DSResponse response) {
    		final AssetServiceAsync service = ServiceUtils.getAssetServiceAsync();
    		service.getAssetsMap(new KeyValueJsonAsyncCallback() {
    			@Override
    			public void responseFailure(Throwable e) {
    				SC.warn("ERROR : " + e.getMessage(), null);
    				response.setStatus(RPCResponse.STATUS_FAILURE);
    				processResponse(requestId, response);
    			}
    			@Override
    			public void responseSuccess(Record[] records) {
    				response.setData(records);
    				processResponse(requestId, response);				
    			}
    
    		});
    	}
    
    	@Override
    	protected void executeRemove(String requestId, DSRequest request, DSResponse response) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	protected void executeUpdate(String requestId, DSRequest request, DSResponse response) {
    		// TODO Auto-generated method stub
    		
    	}
    	
    	@Override
    	protected Object getValueOf(String from, String fieldName) {
    		return null;
    	}
    KeyValueJsonAsyncCallback just transforms json key:value to Record
    My AssetJsonDataSource is tested and working with SelectItems.

    I would need to see all your code to understand what you're doing...

    It looks like you're using JSON and client side only I'm using RPC and Objects (server side only).

    Your declarations are a lot different from what I have so I would have to see it all.

    Leave a comment:


  • lbenavides
    replied
    Reparenting a node in a tree grid using GWT-RPC datasource doesn't work

    Hello everyone,

    I am using a GWT-RPC datasource with a tree grid. The problem I have is that reparenting a node doesn't actually move the node to its new location in the tree. It does work when the node is dragged and dropped, though.

    Here are the details.

    To reparent the node, I assign the primary key field (ID) of the new parent to the node being moved's foreign key field (PARENT_ID), which, in a tree, points to the parent:

    [CODE]
    // New parent
    ListGridRecord newParent = treeGrid.getSelectedRecord();

    // Set the record's PARENT_ID attribute equal to the parent ID
    record.setAttribute(PARENT_ID, newParent.getAttribute(ID));

    // Update the record
    treeGrid.updateData(record);
    [\CODE]

    This results in a call to my datasource's executeUpdate method, where I call my server-side service and call response.setData, and processResponse with the response:

    Code:
    	protected void executeUpdate(final String requestId, final DSRequest request, final DSResponse response) {
    
    		// Retrieve record to be updated.
    		final ListGridRecord record = new ListGridRecord(request.getData());
    		final GroupDto group = new GroupDto();
    		copyValues(record, group);
    
    		// Ask the server to update the group's properties corresponding to the specified module record.
    		adminService.updateGroupProperties(group, new AsyncCallback<GroupDto>() {
    
    			public void onFailure(Throwable caught) {
    				// The server returned an error status; inform the module.
    				response.setStatus(RPCResponse.STATUS_FAILURE);
    				processResponse(requestId, response);
    			}
    
    			public void onSuccess(GroupDto updatedNode) {
    				// The group's properties were successfully updated on the server so finish updating the record.
    				copyValues(updatedNode, record);
    				ListGridRecord[] responseData = new ListGridRecord[1];
    				responseData[0] = record;
    				response.setData(responseData);
    				processResponse(requestId, response);
    			}
    
    		});
    	}
    I can see that the server comes back with the updated record, which has the ID of the new parent. I can also see that the record in the tree is updated and, likewise, has the ID of the parent, however, it stays in its original location, not under the new parent.

    I verified that executeUpdate(...) is called with the same parameters (i.e., operationType = UPDATE and updated record) when the user drags and drops the node, but, in that case, the node *does* move to its new location under the new parent.

    Using the Developer Console I found that dragging and dropping passes two extra request parameters to the update operation versus invoking updateData explicitly, namely '_parent_isc_ResultTree_4: Obj{ID:305746317786}' and '_selection_2: false':

    Code:
    10:19:37.232:INFO:ResultTree:isc_ResultTree_4 (created by: isc_OID_1):Updating cache: operationType 'update', 1 rows update data:
    [
    {__ref: com.smartgwt.client.widgets.tree.TreeNode@10a250a,
    id: "305829641916",
    title: "Brasing Meats",
    parentId: "305833462635",
    _parent_isc_ResultTree_4: Obj{ID:305746317786},
    isFolder: undef,
    _selection_2: false}
    ]
    My question is, how should I call treeGrid.updateData(...) to have the node move to its new location, as when dragging and dropping?

    Thanks so much for your insights.

    Luis

    Leave a comment:


  • mnenchev
    replied
    Originally posted by gcstang
    Please post your sample application.
    I do not have deployable sample at the moment but here is the code connected with the problem:
    I have asset:newsDays one to many relationship
    Code:
    //view
    	
    		final DynamicForm newsDayForm = new DynamicForm();
    		newsDayForm.setDataSource(NewsDaysDataSource.getInstance());
    
    // newsDaysDS
    	public NewsDaysDataSource() {
    		setClientOnly(true);
    
    		pk = new DataSourceIntegerField("id", "News Day Id");
    		pk.setPrimaryKey(true);
    		pk.setHidden(true);
    		addField(pk);
    
    		assetField = new DataSourceIntegerField("assetId");
    		assetField.setCanEdit(true);
    		assetField.setEditorType(new WebSelectItem(AssetJsonDataSource.getInstance()));
    		assetField.setForeignKey("assetsDS.key");
    		assetField.setRequired(true);
    		addField(assetField);
    		dateField = new DataSourceDateField("date", "Date");
    		final DateRangeValidator validator = new DateRangeValidator();
    		validator.setMin(new Date());
    		dateField.setRequired(true);
    		dateField.setValidators(validator);
    		addField(dateField);
    		intervalField = new DataSourceIntegerField("interval", "Interval");
    		final IntegerRangeValidator integerValidator = new IntegerRangeValidator();
    		integerValidator.setMin(0);
    		intervalField.setValidators(integerValidator);
    		intervalField.setRequired(true);
    		addField(intervalField);
    	}
    
    // AssetDS
    protected DataSourceIntegerField key;
    	protected DataSourceField value;
    	
    	public AssetJsonDataSource() {
    		key = new DataSourceIntegerField("key");
    		key.setHidden(true);
    		key.setPrimaryKey(true);
    		addField(key);
    		value = new DataSourceTextField("value");
    		addField(value);
    		setClientOnly(true);
    		this.setID("assetsDS");
    	}
    	
    	@Override
    	protected void executeAdd(String requestId, DSRequest request, DSResponse response) {
    		
    	}
    
    	@Override
    	protected void executeFetch(final String requestId, DSRequest request, final DSResponse response) {
    		final AssetServiceAsync service = ServiceUtils.getAssetServiceAsync();
    		service.getAssetsMap(new KeyValueJsonAsyncCallback() {
    			@Override
    			public void responseFailure(Throwable e) {
    				SC.warn("ERROR : " + e.getMessage(), null);
    				response.setStatus(RPCResponse.STATUS_FAILURE);
    				processResponse(requestId, response);
    			}
    			@Override
    			public void responseSuccess(Record[] records) {
    				response.setData(records);
    				processResponse(requestId, response);				
    			}
    
    		});
    	}
    
    	@Override
    	protected void executeRemove(String requestId, DSRequest request, DSResponse response) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	protected void executeUpdate(String requestId, DSRequest request, DSResponse response) {
    		// TODO Auto-generated method stub
    		
    	}
    	
    	@Override
    	protected Object getValueOf(String from, String fieldName) {
    		return null;
    	}
    KeyValueJsonAsyncCallback just transforms json key:value to Record
    My AssetJsonDataSource is tested and working with SelectItems.

    Leave a comment:


  • gcstang
    replied
    Post a sample application ...

    Originally posted by mnenchev
    Hi, I updated my smartgwt jar to version 1.2-SNAPSHOT and my gwt to 1.7.0, but the problem remains.
    Please post your sample application.

    Leave a comment:


  • mnenchev
    replied
    Originally posted by gcstang
    What SmartGWT version and GWT version are you using...this only started working with 1.2 SmartGWT it was a bug before that.
    Hi, I updated my smartgwt jar to version 1.2-SNAPSHOT and my gwt to 1.7.0, but the problem remains.
    Last edited by mnenchev; 10 Sep 2009, 02:10.

    Leave a comment:


  • gcstang
    replied
    SmartGWT Version

    Originally posted by mnenchev
    Hi, thanks for the help, it is working with one exception. If i set foreign key intField.setForeignKey("weblgds.websid"); the id is shown, but i want to show the displayValue and map it to the id.
    What SmartGWT version and GWT version are you using...this only started working with 1.2 SmartGWT it was a bug before that.

    Leave a comment:


  • mnenchev
    replied
    Originally posted by gcstang
    In this example the Datasource is used in a ListGrid.

    Primary Datasource Code:
    Code:
    public class MemberListGridDS extends GWTRPCDataSource<MemberRecord> {
    
    	public MemberListGridDS() {
    		//Replace with actual RPC Service
    		super(SGWTMemberService.Impl.getInstance());
    
    		DataSourceIntegerField intField = new DataSourceIntegerField("mbrid");
    		intField.setPrimaryKey(true);
    		intField.setCanEdit(false);
    		addField(intField);
    		
    		intField = new DataSourceIntegerField("websid");
    		intField.setCanEdit(true);
    		intField.setEditorType(new WebSelectItem());
    		intField.setForeignKey("weblgds.websid");
    		addField(intField);
    SelectItem Code (This uses another Datasource):
    Code:
    public class WebSelectItem extends SelectItem {
    
    	public WebSelectItem() {
    		WebListGridDS ds = new WebListGridDS();
    		ds.setID("weblgds");
    		setValueField("websid");
    		setDisplayField("dsc");
    		setEmptyPickListMessage("No data in table");
    		setPickListWidth(450);
    		
    		ListGridField websidField = new ListGridField("websid");
    		ListGridField dscField = new ListGridField("dsc");
    		setPickListFields(websidField, dscField);
    		
    		setOptionDataSource(ds);
    		setAutoFetchData(true);
    	}
    }
    Hi, thanks for the help, it is working with one exception. If i set foreign key intField.setForeignKey("weblgds.websid"); the id is shown, but i want to show the displayValue and map it to the id.

    Leave a comment:


  • gcstang
    replied
    FK Example

    Originally posted by mnenchev
    Post a snippet of code pls.
    In this example the Datasource is used in a ListGrid.

    Primary Datasource Code:
    Code:
    public class MemberListGridDS extends GWTRPCDataSource<MemberRecord> {
    
    	public MemberListGridDS() {
    		//Replace with actual RPC Service
    		super(SGWTMemberService.Impl.getInstance());
    
    		DataSourceIntegerField intField = new DataSourceIntegerField("mbrid");
    		intField.setPrimaryKey(true);
    		intField.setCanEdit(false);
    		addField(intField);
    		
    		intField = new DataSourceIntegerField("websid");
    		intField.setCanEdit(true);
    		intField.setEditorType(new WebSelectItem());
    		intField.setForeignKey("weblgds.websid");
    		addField(intField);
    SelectItem Code (This uses another Datasource):
    Code:
    public class WebSelectItem extends SelectItem {
    
    	public WebSelectItem() {
    		WebListGridDS ds = new WebListGridDS();
    		ds.setID("weblgds");
    		setValueField("websid");
    		setDisplayField("dsc");
    		setEmptyPickListMessage("No data in table");
    		setPickListWidth(450);
    		
    		ListGridField websidField = new ListGridField("websid");
    		ListGridField dscField = new ListGridField("dsc");
    		setPickListFields(websidField, dscField);
    		
    		setOptionDataSource(ds);
    		setAutoFetchData(true);
    	}
    }

    Leave a comment:


  • mnenchev
    replied
    Originally posted by gcstang
    I've done this using a ListGrid and a SelectItem, it works quite well.

    The visual supplies the ListGrid and a drop down table with the FK's available for selection.
    Post a snippet of code pls.

    Leave a comment:


  • gcstang
    replied
    SmartGWT 2.0 updates?

    Originally posted by justinc
    Hi all,

    I see Sanjiv tagged netname's 303 issue for v2.0, excellent (Thanks for raising this netname, btw).

    Which brings the question, when is 2.0 expected ;)

    Thanks if you know the answer,
    Justin
    Will 2.0 support GWT 2.0 or is it a bug fix and feature release only?

    Thank you,

    Leave a comment:


  • justinc
    replied
    Hi all,

    I see Sanjiv tagged netname's 303 issue for v2.0, excellent (Thanks for raising this netname, btw).

    Which brings the question, when is 2.0 expected ;)

    Thanks if you know the answer,
    Justin

    Leave a comment:


  • gcstang
    replied
    I've mapped FK's through the datasource....

    Originally posted by mnenchev
    Did someone use smart gwt + gwt rpc to manage related data with foreign keys?
    I've done this using a ListGrid and a SelectItem, it works quite well.

    The visual supplies the ListGrid and a drop down table with the FK's available for selection.

    Leave a comment:

Working...
X