Hi,
I have a html page which host jquery grid and it binded to hard coded Json data. Note that I have set autoGenerateColumns property to true. Also I have added a button, on click of that i am trying to rebind the grid with new data.
If new data is having same number of columns and same name then it works fine. Grid reflects the data. But if new data is having completely new columns then it do not get reflected in UI. It removes all the data rows but the header still shows old column names.
I also tried using destroy but it completely removes the grids from UI.
Following is my HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" href="SamplesBrowser/SamplesCommon/jQuery/Styles/min/ig/jquery.ui.custom.min.css" rel="stylesheet" />
<link type="text/css" href="SamplesBrowser/SamplesCommon/jQuery/Styles/base/ig.ui.min.css" rel="stylesheet" />
<script type="text/javascript" src="SamplesBrowser/Scripts/jquery.js"></script>
<script type="text/javascript" src="SamplesBrowser/Scripts/jquery-ui.js"></script>
<script type="text/javascript" src="SamplesBrowser/SamplesCommon/jQuery/Scripts/combined/min/ig.ui.min.js"></script>
<script type="text/javascript" src="SamplesBrowser/Scripts/jquery.tmpl.js"></script>
<script type="text/javascript">
var products = [];
products[0] = { "ProductID": 1, "Name": "Adjustable Race", "ProductNumber": "AR-5381" };
products[1] = { "ProductID": 2, "Name": "Bearing Ball", "ProductNumber": "BA-8327" };
products[2] = { "ProductID": 3, "Name": "BB Ball Bearing", "ProductNumber": "BE-2349" };
var jsonData = [];
jsonData[0] = { "EmployeeID": 1, "EmployeeName": "Samuel Das" };
jsonData[1] = { "EmployeeID": 2, "EmployeeName": "Steve Austin" };
$(window).load(function () {
$("#grid1").igGrid({
autoGenerateColumns: true,
dataSource: products
});
function ReLoadData() {
//$('#grid1').igGrid('destroy');
//$('#grid1').igGridUpdating( "destroy" );
$('#grid1').igGrid('dataSourceObject', jsonData);
$('#grid1').igGrid('dataBind');
}
</script>
<h1>
igGrid - AutoGenerateColumns
</h1>
<input type="submit" onclick="ReLoadData();" value="Reload" />
</head>
<body>
<br>
<table id="grid1">
</table>
</body>
</html>
Any help or suggestions will be appreciated.
Hi, You've stumbled upon a bug I'm afraid - it's specific to the fact that the grid is bound to a TABLE element. Here's support case number of this bug (you can use it to track the progress on the issue):CAS-90176-SLWTQ7
A fix for it will be available as soon as our next Service Release (in May) is out. Until then, let me give you a workaround which will hopefully work fine for you. I'm afraid that the case of feeding the igGrid with a differently-structured source data won't work with the dataSourceObject() API function. In order to get it working you will need to destroy the grid (yes, you were on the right track :)) and then recreate it. Here's how I've altered your code in order to get it to work: <script type="text/javascript"> var products = []; products[0] = { "ProductID": 1, "Name": "Adjustable Race", "ProductNumber": "AR-5381" }; products[1] = { "ProductID": 2, "Name": "Bearing Ball", "ProductNumber": "BA-8327" }; products[2] = { "ProductID": 3, "Name": "BB Ball Bearing", "ProductNumber": "BE-2349" }; var jsonData = []; jsonData[0] = { "EmployeeID": 1, "EmployeeName": "Samuel Das" }; jsonData[1] = { "EmployeeID": 2, "EmployeeName": "Steve Austin" }; var gridOptions = { autoGenerateColumns: true, dataSource: products }; $(window).load(function () { $("#grid1").igGrid(gridOptions); }); function ReLoadData() { $('#grid1').igGrid('destroy'); gridOptions.dataSource = jsonData; $("#grid1").igGrid(gridOptions); } </script> And this is where the bug with the TABLE element kicks in (you can try it for yourself to see the outcome). The workaround is to use a DIV element instead of a TABLE. Cheers, Borislav
I am having this issue now with the latest version. Resetting the datasource on the grid doesn't change the previous Auto-Generated columns. If i try to destroy and recreate the grid like was done above, nothing runs after i call the destroy method. Not sure what I am doing wrong here.
<div id="gridDisplay"></div>
function ShowOnScreen(reportID, storedProcedure) { var displayDiv = document.getElementById('divShowOnScreen'); var title = document.getElementById('displayTitle');
$.post('@Url.Action("PopulateDisplayGrid")', { "ReportID": reportID, "StoredProcedure": storedProcedure }).success(GridSuccess)
function GridSuccess(data) { title.innerHTML = data.Title;
$("#gridDisplay").igGrid("destory");
var ds = new $.ig.DataSource({ type: "json", dataSource: data.Grid }); ds.dataBind();
$("#gridDisplay").igGrid({ autoGenerateColumns: true, //width: "100%", dataSource: ds, features: [ { name: "Paging", type: "local", pageSize: 10, pageSizeDropDownLocation: "inpager" } ], });
displayDiv.style.display = 'inline'; } }