We are using igGrid to display different data sources as grids. Since the grid data source is fetched dependent on the structure of a database table that is user controlled we cannot beforehand know the collection of columns or their data type. Due to this we are auto generating columns when binding the data to the grid.
This works fine so long as the user keeps looking at the same view (the same collection of columns). When changing views however the old views' columns aren't cleared. This means if the user was looking at a view with 10 columns and then switched to a view with 4 columns, the new view will have the first 4 columns from the current view and the following 6 columns from the old view.
When binding data to the grid we are using:
$("#dataGrid").igGrid({ schemaGenerated: generateSchema, columnsgenerated: generateColumns, autoGenerateColumns: true, defaultColumnWidth: "150px", width: "100%", dataSource: data, dataSourceType: "json", responseDataKey: "data", features: gridFeatures });
Is there a way to force refresh on the existing grid data source so that it completely drops the old columns?
----
A related issue is that we are using remote paging, sorting and filtering in our grids since the data source can become quite extensive. We are letting the database handle that part and return a controlled size subset of rows that we bind to the grid. The cost of this is that we need to re-bind data using the same code as shown above, after every paging, filtering or sorting activity. The problem is that after re-binding the data, the filtering and sorting properties seem to be cleared off the grid and we need to programmatically write them to the grid again. Is there a way to avoid doing this?
A simple example would be clicking a column header to sort it which would indeed sort the column as expected by re-binding with a new data source that contains a sorted subset of the grid data. But the graphical indicator that the column is sorted will be cleared when re-binding the grid so the user won't get the graphical feedback of the column being sorted. Same goes for filtering, the filter text field is cleared and so is the filter option.
Is there a way to handle remote paging, sorting and filtering without re-binding the data fully? Can you re-bind only the data partially so that it doesn't clear the filter and sorting properties?
We are using ASP.NET and igniteUI v. 13.1.
Please take a look at my post from 06-02-2014 1:34 PM as we still have issues with this and are unable to continue until this is resolved.
Do you have any update on this?
Hey Maya,
The string sent from the server to the client side (preivously via an explicit ajax call and then bound to the grid via dataBind and now sent back from the function URL given to dataSourceURL) looks like this:
"{"totalRowCount":3,"pageRowCount":40,"rowSelectorVisible":"True","wordWrapGrid":"False","data":[{"Date":"\/Date(+1333324800000)\/","Id":"1"},{"Date":"\/Date(+1333324800000)\/","Id":"2"},{"Date":"\/Date(+1333324800000)\/","Id":"3"}]}"
Where the "data" property is what shold be bound to the grid. The other information is just meta data we need for other purposes. This return string looks the same as when we had the explicit ajax call and manually destroyed and re-bound the data on each interaction earlier, and during that time we set the responseDataKey to "data" and it worked fine.
But after switching to dataSourceUrl (without changing the server side so the same string is returned) and letting the responseDataKey still be "data" it doesn't work anymore. It reaches the server side method and the string is returned as expected, but then infragistics.core.js crashes cause _data is undefined saying:
"Unhandled exception at line 194, column 25748 in http://localhost:55765/igniteUI/js/infragistics.core.js0x800a138f - JavaScript runtime error: Unable to get property 'length' of undefined or null reference"
So I have two questions:
- In what way to we need to modify our server side stringification of the data returned to the client, AND
- What if the data set should be empty for those user parameters, how can we return an empty set without getting a grid exception. Just return the headers?
Hello Elin ,
I’m just following up to see if you’ve been able to resolve your issue. If you have any questions or concerns or if you need further assistance please let me know.
Best Regards,
Maya Kirova
Developer Support Engineer
Infragistics, Inc.
http://es.infragistics.com/support
Let me know if the suggested approach would work in your scenario once you’ve had the chance to test the sample.
Also if you have any additional questions or concerns don’t hesitate to let me know.
Developer Support Engineer II