public ActionResult EditReport(Guid reportId)
        {
            using (var service = ServiceLocator.Instance.Resolve<IReportService>())
            {
                var report = service.FindReport(reportId);
                var tableSchemas = this.GetTableSchema(report.Rdbms, report.ReportName);

                var model = new ReportModifyViewModel {Report = report, TableSchemas = tableSchemas};
                this.GetViewBags();

                return PartialView(model);
            }
        }
        public ActionResult EditReport(ReportModifyViewModel model, IEnumerable<string> colunms)
        {
            try
            {
                var creator = this.LoginUser.Identity.Name;
                var reportDto = model.Report;
                using (var service = ServiceLocator.Instance.Resolve<IReportService>())
                {
                    // modify the report header
                    service.UpdateReportHeader(reportDto.ID, reportDto.DisplayName, reportDto.Description, creator);

                    // modify the report fields (add / remove)
                    var report = service.FindReport(reportDto.ID);
                    var tableSchemas = this.GetTableSchema(report.Rdbms, report.ReportName);

                    // firstly remove all,then add and sort
                    IEnumerable<ReportFieldDto> addingFileds = null;
                    if (colunms != null)
                    {
                        addingFileds = (from table in tableSchemas
                            where colunms.Contains(table.ColunmName)
                            select new ReportFieldDto
                            {
                                FieldName = table.ColunmName,
                                DisplayName = table.ColunmName,
                                DataType = table.DataType,
                                CreatedBy = creator
                            });
                    }

                    service.SetReportFields(reportDto.ID, addingFileds);
                }

                return Json(true);
            }
            catch (Exception)
            {
                return Json(false, "Update the report failure.");
            }
        }