Components bound to DataStore will keep their data synchronized with the data stored in DataStore. They will also be bound with each other (e.g. a grid and a form).
var list1 = new dhtmlXDataStore({ url:"../data/data1.json", datatype:"json" });
grid.sync(list1);
var data1 = new dhtmlXDataStore({ url:"../data/data1.json", datatype:"json" });
var data2 = new dhtmlXDataStore({ url:"../data/data2.json", datatype:"json" });
data2.bind(data1, function(data, filter){
if (filter)
return data.id == filter.id;
});
grid1.attachEvent("onRowSelect", function(id){
data1.setCursor(id);
});
grid1.sync(data1);
grid2.sync(data2);
var data1 = new dhtmlXDataStore({ url:"../data/data1.json", datatype:"json" });
var data2 = new dhtmlXDataStore({ dataFeed:"../data/json.php", datatype:"json" });
data2.bind(data1, function(data, filter){
filter.Package = "Filter by "+data.Package;
});
grid1.attachEvent("onSelectStateChanged", function(id){
data1.setCursor(id);
});
grid1.sync(data1);
grid2.sync(data2);
The unbind() method is used to unbind 2 DataStore objects:
...
data2.bind(data1, function(data, filter){
if (filter)
return data.id == filter.id;
});
data2.unbind(data1);
To perform any data manipulation in the bound-to-DataStore component(s) you should remember the main thing: operations are performed with components indirectly, by means of the related dhtmlxDataStore object.
What does it mean? For example, if you want to delete some record from a grid, you should delete it from the DataStore the grid is bound to. After the record has been deleted from Datastore, it will be automatically deleted from the grid. This rule concerns any operation: update, deletion, creation, filtering or sorting.
var store = new dhtmlXDataStore({
url:"php/data.php"
});
myGrid.sync(store);
...
var selectedItem = myGrid.getSelectedRowId();
store.remove(selectedItem);
Some components (grid, dataview, form) while being bound to dataStore start to have the method save(item_id) available. The method allows you to save changes in Datastore programmatically.
Let's assume, you have a grid. When you edit some record and press 'Enter', the changes are saved automatically. To save some data programmatically just use the following code:
var store = new dhtmlXDataStore();
myDP = new dataProcessor("php/data.php");
myDP.init(store);
grid.sync(store);
var selectedItem = myGrid.getSelectedRowId();
grid.save(selectedItem);
The second tip concerns the method setCursor(item_id). When dealing with several components, you can be confused while loading data from master to slave components - for which one to call the method. Remember, the method is called for the master to push data to slaves.
For example, if you have a grid bound to DataStore and a form bound to the grid, and want to update form data, call:
myform.bind(mygrid);
mygrid.setCursor(row_id);
When you bind Grid to DataStore, the filtering and sorting functions won't work properly in Grid.
If you reload the page, the changes made in Grid will be reverted, as DataStore won't apply them.
To solve this issue, while binding grid to datastore with the help of the sync method, you need to pass the second parameter to this method - object with two attributes that switches on the filtering and sorting functionality of DataStore:
myGrid.sync(data, {sort:true, filter:true});
In the downloaded dhtmlxSuite package you can find a sample of such a case, by following the path dhtmlxDataStore/samples/04_mastergrid/01_client.html.
Back to top