public void SyncGridDefinitions(string appDataPath) { //Sync the list of grids using (jqGridExampleDbContext db = new jqGridExampleDbContext()) { IEnumerable<string> gridProcedures = db.GetGridProcedures(); foreach (string procedure in gridProcedures) { Grid savedGrid = GetGridDefinition(procedure, appDataPath); IEnumerable<GridParameter> parameters = db.DeriveParameters(procedure); Dictionary<string, object> parameterList = new Dictionary<string, object>(); foreach (GridParameter p in parameters) { parameterList.Add(p.Name, string.Empty); } IEnumerable<GridColumn> columns = db.DeriveColumnList(procedure, parameterList); if (savedGrid == null) { //There is no existing file so build the entire grid model and persist it savedGrid = new Grid(); savedGrid.Name = procedure; savedGrid.StoredProcedure = procedure; savedGrid.Title = procedure; savedGrid.Columns = columns.ToList(); savedGrid.Parameters = parameters.ToList(); SaveGridDefinition(procedure, appDataPath, savedGrid); } else { //This is an existing file. Check for new or removed columns and parameters var removedColumns = from col in savedGrid.Columns where !columns.Any(c => c.Name == col.Name) select col; foreach (var col in removedColumns) { savedGrid.Columns.Remove(col); } var addedColumns = from col in columns where !savedGrid.Columns.Any(c => c.Name == col.Name) select col; foreach (var col in addedColumns) { savedGrid.Columns.Add(col); } var removedParameters = from param in savedGrid.Parameters where !parameters.Any(p => p.Name == param.Name) select param; foreach (var param in removedParameters) { savedGrid.Parameters.Remove(param); } var addedParameters = from param in parameters where !savedGrid.Parameters.Any(p => p.Name == param.Name) select param; foreach (var param in addedParameters) { savedGrid.Parameters.Add(param); } SaveGridDefinition(procedure, appDataPath, savedGrid); } } } }