public static string SaveChanges(string rows) { Dictionary <string, string> result = new Dictionary <string, string>() { { "saved", "0" } , { "failed", "0" } , { "savedIds", "" } , { "failedIds", "" } , { "error", "" } }; bool saved = false; int savedQty = 0, failedQty = 0; string ids = string.Empty, failedIds = string.Empty, errorMsg = string.Empty, tempMsg = string.Empty; try { DataTable dtjson = (DataTable)JsonConvert.DeserializeObject(rows, (typeof(DataTable))); if (dtjson == null || dtjson.Rows.Count == 0) { errorMsg = "Unable to save. No list of changes was provided."; } else { int id = 0; //save foreach (DataRow dr in dtjson.Rows) { id = 0; tempMsg = string.Empty; int.TryParse(dr["ITEMID"].ToString(), out id); WorkloadItem wi = WorkloadItem.WorkItem_GetObject(id); //update object with new values wi = parseDataRow(wi, dtjson.Clone(), dr); saved = WorkloadItem.WorkItem_QM_Update(wi, out tempMsg); if (saved) { ids += string.Format("{0}{1}", ids.Length > 0 ? "," : "", id.ToString()); savedQty += 1; Workload.SendWorkloadEmail("WorkItem", false, id); } else { failedQty += 1; } if (tempMsg.Length > 0) { errorMsg = string.Format("{0}{1}{2}", errorMsg, errorMsg.Length > 0 ? Environment.NewLine : "", tempMsg); } } } } catch (Exception ex) { LogUtility.LogException(ex); saved = false; errorMsg = ex.Message; } result["savedIds"] = ids; result["failedIds"] = failedIds; result["saved"] = savedQty.ToString(); result["failed"] = failedQty.ToString(); result["error"] = errorMsg; return(JsonConvert.SerializeObject(result, Formatting.None)); }