using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using ProjectTracker.Library; public partial class ProjectEdit : System.Web.UI.Page { private enum Views { MainView = 0, AssignView = 1 } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ApplyAuthorizationRules(); } else this.ErrorLabel.Text = string.Empty; } private void ApplyAuthorizationRules() { Project obj = GetProject(); // project display if (Project.CanEditObject()) { if (obj.IsNew) this.DetailsView1.DefaultMode = DetailsViewMode.Insert; else this.DetailsView1.DefaultMode = DetailsViewMode.Edit; this.AddResourceButton.Visible = !obj.IsNew; } else { this.DetailsView1.DefaultMode = DetailsViewMode.ReadOnly; this.AddResourceButton.Visible = false; } this.DetailsView1.Rows[ this.DetailsView1.Rows.Count - 1].Visible = Project.CanEditObject(); // resource display this.GridView1.Columns[ this.GridView1.Columns.Count - 1].Visible = Project.CanEditObject(); } #region Project DetailsView protected void DetailsView1_ItemCreated(object sender, EventArgs e) { if (DetailsView1.DefaultMode == DetailsViewMode.Insert) { Project obj = GetProject(); ((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text = obj.Name; ((TextBox)DetailsView1.Rows[2].Cells[1].Controls[0]).Text = obj.Started; ((TextBox)DetailsView1.Rows[3].Cells[1].Controls[0]).Text = obj.Ended; ((TextBox)DetailsView1.FindControl("TextBox1")).Text = obj.Description; } } protected void DetailsView1_ItemInserted( object sender, DetailsViewInsertedEventArgs e) { Project project = GetProject(); if (!project.IsNew) Response.Redirect("ProjectEdit.aspx?id=" + project.Id.ToString()); } protected void DetailsView1_ItemUpdated( object sender, DetailsViewUpdatedEventArgs e) { ApplyAuthorizationRules(); } protected void DetailsView1_ItemDeleted( object sender, DetailsViewDeletedEventArgs e) { Response.Redirect("ProjectList.aspx"); } #endregion #region Resource Grid protected void AddResourceButton_Click( object sender, EventArgs e) { this.MultiView1.ActiveViewIndex = (int)Views.AssignView; } protected void GridView2_SelectedIndexChanged( object sender, EventArgs e) { Project obj = GetProject(); try { obj.Resources.Assign(int.Parse( this.GridView2.SelectedDataKey.Value.ToString())); if (SaveProject(obj) > 0) { this.GridView1.DataBind(); this.MultiView1.ActiveViewIndex = (int)Views.MainView; } } catch (InvalidOperationException ex) { ErrorLabel.Text = ex.Message; } } protected void CancelAssignButton_Click( object sender, EventArgs e) { this.MultiView1.ActiveViewIndex = (int)Views.MainView; } #endregion #region ProjectDataSource protected void ProjectDataSource_DeleteObject( object sender, Csla.Web.DeleteObjectArgs e) { try { Project.DeleteProject(new Guid(e.Keys["Id"].ToString())); Session["currentObject"] = null; e.RowsAffected = 1; } catch (Csla.DataPortalException ex) { this.ErrorLabel.Text = ex.BusinessException.Message; e.RowsAffected = 0; } catch (Exception ex) { this.ErrorLabel.Text = ex.Message; e.RowsAffected = 0; } } protected void ProjectDataSource_InsertObject( object sender, Csla.Web.InsertObjectArgs e) { Project obj = GetProject(); Csla.Data.DataMapper.Map(e.Values, obj, "Id"); e.RowsAffected = SaveProject(obj); } protected void ProjectDataSource_SelectObject( object sender, Csla.Web.SelectObjectArgs e) { e.BusinessObject = GetProject(); } protected void ProjectDataSource_UpdateObject(object sender, Csla.Web.UpdateObjectArgs e) { Project obj = GetProject(); Csla.Data.DataMapper.Map(e.Values, obj); e.RowsAffected = SaveProject(obj); } #endregion #region ResourcesDataSource protected void ResourcesDataSource_DeleteObject( object sender, Csla.Web.DeleteObjectArgs e) { Project obj = GetProject(); int rid = int.Parse(e.Keys["ResourceId"].ToString()); obj.Resources.Remove(rid); e.RowsAffected = SaveProject(obj); } protected void ResourcesDataSource_SelectObject( object sender, Csla.Web.SelectObjectArgs e) { Project obj = GetProject(); e.BusinessObject = obj.Resources; } protected void ResourcesDataSource_UpdateObject( object sender, Csla.Web.UpdateObjectArgs e) { Project obj = GetProject(); int rid = int.Parse(e.Keys["ResourceId"].ToString()); ProjectResource res = obj.Resources.GetItem(rid); Csla.Data.DataMapper.Map(e.Values, res); e.RowsAffected = SaveProject(obj); } #endregion #region ResourceListDataSource protected void ResourceListDataSource_SelectObject( object sender, Csla.Web.SelectObjectArgs e) { e.BusinessObject = ProjectTracker.Library.ResourceList.GetResourceList(); } #endregion #region RoleListDataSource protected void RoleListDataSource_SelectObject( object sender, Csla.Web.SelectObjectArgs e) { e.BusinessObject = RoleList.GetList(); } #endregion private Project GetProject() { object businessObject = Session["currentObject"]; if (businessObject == null || !(businessObject is Project)) { try { string idString = Request.QueryString["id"]; if (!string.IsNullOrEmpty(idString)) { Guid id = new Guid(idString); businessObject = Project.GetProject(id); } else businessObject = Project.NewProject(); Session["currentObject"] = businessObject; } catch (System.Security.SecurityException) { Response.Redirect("ProjectList.aspx"); } } return (Project)businessObject; } private int SaveProject(Project project) { int rowsAffected; try { Session["currentObject"] = project.Save(); rowsAffected = 1; } catch (Csla.Validation.ValidationException ex) { System.Text.StringBuilder message = new System.Text.StringBuilder(); message.AppendFormat("{0}
", ex.Message); if (project.BrokenRulesCollection.Count == 1) message.AppendFormat("* {0}: {1}", project.BrokenRulesCollection[0].Property, project.BrokenRulesCollection[0].Description); else foreach (Csla.Validation.BrokenRule rule in project.BrokenRulesCollection) message.AppendFormat("* {0}: {1}
", rule.Property, rule.Description); this.ErrorLabel.Text = message.ToString(); rowsAffected = 0; } catch (Csla.DataPortalException ex) { this.ErrorLabel.Text = ex.BusinessException.Message; rowsAffected = 0; } catch (Exception ex) { this.ErrorLabel.Text = ex.Message; rowsAffected = 0; } return rowsAffected; } }