ProjectDetails.aspx.cs
上传用户:autodoor
上传日期:2022-08-04
资源大小:9973k
文件大小:15k
源码类别:

.net编程

开发平台:

Others

  1. using System;
  2. using System.Web;
  3. using System.Web.UI.WebControls;
  4. using qminoa.BLL.PM;
  5. namespace qminoa.Webs.PM
  6. {
  7. public class ProjectDetails : qminoa.Webs.PageBase
  8. {
  9. public const string UserRoleNone = "0";
  10. public const string UserRoleAdministrator = "1";
  11. public const string UserRoleProjectManager = "2";
  12. public const string UserRoleConsultant = "3";
  13. protected System.Web.UI.WebControls.TextBox ProjectName;
  14. protected System.Web.UI.WebControls.TextBox Description;
  15. protected System.Web.UI.WebControls.TextBox CompletionDate;
  16. protected System.Web.UI.WebControls.TextBox Duration;
  17. protected System.Web.UI.WebControls.ListBox Members;
  18. protected System.Web.UI.WebControls.Button CopyButton;
  19. protected System.Web.UI.WebControls.Button AddButton;
  20. protected System.Web.UI.WebControls.Button SaveButton;
  21. protected System.Web.UI.WebControls.DropDownList Managers;
  22. protected System.Web.UI.WebControls.DropDownList Projects;
  23. protected System.Web.UI.WebControls.TextBox CategoryName;
  24. protected System.Web.UI.WebControls.TextBox Abbrev;
  25. protected System.Web.UI.WebControls.TextBox CatDuration;
  26. protected System.Web.UI.WebControls.DataGrid CategoriesGrid;
  27. protected System.Web.UI.WebControls.RequiredFieldValidator ProjectNameRequiredfieldvalidator;
  28. protected System.Web.UI.WebControls.RequiredFieldValidator ManagerRequiredFieldValidator;
  29. protected System.Web.UI.WebControls.CompareValidator CompletionDateCompareValidator;
  30. protected System.Web.UI.WebControls.RequiredFieldValidator CompletionDateRequiredFieldValidator;
  31. protected System.Web.UI.WebControls.CompareValidator DurationCompareValidator;
  32. protected System.Web.UI.WebControls.RequiredFieldValidator DurationRequiredFieldValidator;
  33. protected System.Web.UI.WebControls.CustomValidator ProjectsGridCustomValidator;
  34. protected System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidatorAbbrev;
  35. protected System.Web.UI.WebControls.CompareValidator CatDurationValidator;
  36. protected System.Web.UI.WebControls.CustomValidator AbbrevCustomValidator;
  37. protected System.Web.UI.WebControls.Button CancelButton;
  38. protected System.Web.UI.WebControls.Button CancelButton2;
  39. protected System.Web.UI.WebControls.Button CancelButton3;
  40. protected System.Web.UI.WebControls.Button DeleteButton;
  41. protected System.Web.UI.WebControls.Button DeleteButton2;
  42. protected System.Web.UI.WebControls.Button SaveButton2;
  43. protected System.Web.UI.WebControls.RangeValidator RangeValidator1;
  44. protected System.Web.UI.WebControls.RangeValidator RangeValidator2;
  45. protected System.Web.UI.WebControls.Label CategoryErrorMessage;
  46. protected System.Web.UI.WebControls.Label ErrorMessage;
  47. private int _projID;
  48. private PMUser  _user;
  49. private void Page_Load(object sender, System.EventArgs e)
  50. {
  51. this.PageBegin("项目管理",true);
  52. _user = new PMUser(Convert.ToInt16(this.Empid));
  53. if(_user.Role == UserRoleConsultant || _user.Role == UserRoleNone)
  54. {
  55. Response.Redirect(Application["vRoot"]+"/login.aspx");  
  56. }
  57. _projID = (Request.QueryString["id"]==null) ? 0 : Convert.ToInt32(Request.QueryString["id"]);
  58. if (!IsPostBack)
  59. {
  60. Session["catArray"] = new CategoriesCollection();
  61. BindManagers();
  62. BindMembers();
  63. BindOtherProjects();
  64. if (_projID != 0)
  65. BindProject();
  66. }
  67. DeleteButton.Attributes.Add("onclick", "return confirm('删除该项目将删除和该项目相关的进程信息和进程日志信息,确定要删除吗?')");
  68. DeleteButton2.Attributes.Add("onclick", "return confirm('删除该项目将删除和该项目相关的进程信息和进程日志信息,确定要删除吗?')");
  69. }
  70. #region Web Form Designer generated code
  71. override protected void OnInit(EventArgs e)
  72. {
  73. //
  74. // CODEGEN: This call is required by the ASP.NET Web Form Designer.
  75. //
  76. InitializeComponent();
  77. base.OnInit(e);
  78. }
  79. /// <summary>
  80. /// Required method for Designer support - do not modify
  81. /// the contents of this method with the code editor.
  82. /// </summary>
  83. private void InitializeComponent()
  84. {    
  85. this.SaveButton.Click += new System.EventHandler(this.SaveButton_Click);
  86. this.CancelButton.Click += new System.EventHandler(this.CancelButton_Click);
  87. this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
  88. this.AddButton.Click += new System.EventHandler(this.AddButton_Click);
  89. this.AbbrevCustomValidator.ServerValidate += new System.Web.UI.WebControls.ServerValidateEventHandler(this.AbbrevCustomValidator_ServerValidate);
  90. this.CopyButton.Click += new System.EventHandler(this.CopyButton_Click);
  91. this.CategoriesGrid.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.CategoriesGrid_ItemCreated);
  92. this.CategoriesGrid.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.CategoriesGrid_Sort);
  93. this.ProjectsGridCustomValidator.ServerValidate += new System.Web.UI.WebControls.ServerValidateEventHandler(this.ValidateCategories);
  94. this.SaveButton2.Click += new System.EventHandler(this.SaveButton_Click);
  95. this.CancelButton2.Click += new System.EventHandler(this.CancelButton_Click);
  96. this.DeleteButton2.Click += new System.EventHandler(this.DeleteButton_Click);
  97. this.Load += new System.EventHandler(this.Page_Load);
  98. }
  99. #endregion
  100. private void BindManagers()
  101. {
  102. Managers.DataSource = PMUser.ListManagers();
  103. Managers.DataValueField = "UserID";
  104. Managers.DataTextField = "UserName";
  105. Managers.DataBind();
  106. Managers.Items.Insert(0, new ListItem("选择项目经理...", String.Empty));
  107. }
  108. private void BindMembers()
  109. {
  110. Members.DataSource = PMUser.GetAllUsers(_user.UserID);
  111. Members.DataValueField = "UserID";
  112. Members.DataTextField = "UserName";
  113. Members.DataBind();
  114. }
  115. private void BindOtherProjects()
  116. {
  117. Projects.DataSource = Project.GetProjects();
  118. Projects.DataTextField = "Name";
  119. Projects.DataValueField = "ProjectID";
  120. Projects.DataBind();
  121. Projects.Items.Remove(Projects.Items.FindByValue(_projID.ToString()));
  122. if (Projects.Items.Count == 0)
  123. CopyButton.Enabled = false;
  124. }
  125. private void BindProject()
  126. {
  127. Project project = new Project(_projID);
  128. project.Load();
  129. ProjectName.Text = project.Name;
  130. Description.Text = project.Description;
  131. CompletionDate.Text = project.EstCompletionDate.ToShortDateString();
  132. Duration.Text = project.EstDuration.ToString();
  133. Managers.Items.FindByValue(project.ManagerUserID.ToString()).Selected = true;
  134. foreach (PMUser user in project.Members)
  135. {
  136. Members.Items.FindByValue(user.UserID.ToString()).Selected = true;
  137. }
  138. BindCategoriesGrid(project.Categories);
  139. }
  140. private void BindCategoriesGrid(CategoriesCollection cats)
  141. {
  142. SortGridData(cats, SortField, SortAscending);
  143. CategoriesGrid.DataSource = cats;
  144. CategoriesGrid.DataBind();
  145. Session["catArray"] = cats;
  146. }
  147. private void ReturnToProjectList()
  148. {
  149. Session["catArray"] = null;
  150. Response.Redirect("ProjectList.aspx", false);
  151. }
  152. private void SortGridData(CategoriesCollection list, string sortField, bool asc)
  153. {
  154. CategoriesCollection.CategoryFields sortCol = CategoriesCollection.CategoryFields.InitValue;
  155. switch(sortField)
  156. {
  157. case "Name":
  158. sortCol = CategoriesCollection.CategoryFields.Name;
  159. break;
  160. case "Abbrev":
  161. sortCol = CategoriesCollection.CategoryFields.Abbreviation;
  162. break;
  163. case "Duration":
  164. sortCol = CategoriesCollection.CategoryFields.Duration;
  165. break;
  166. }
  167. list.Sort(sortCol, asc);
  168. }
  169. private void CancelButton_Click(object sender, System.EventArgs e)
  170. {
  171. ReturnToProjectList();
  172. }
  173. private void DeleteButton_Click(object sender, System.EventArgs e)
  174. {
  175. Project.Remove(_projID);
  176. ReturnToProjectList();
  177. }
  178. private void SaveButton_Click(object sender, System.EventArgs e)
  179. {
  180. Members.Items.FindByValue(Managers.SelectedItem.Value).Selected = true;
  181. ProjectsGridCustomValidator.Validate();
  182. if (!ProjectsGridCustomValidator.IsValid)
  183. return;
  184. AbbrevCustomValidator.Validate();
  185. if (!AbbrevCustomValidator.IsValid)
  186. return;
  187. CategoriesCollection catArray = (CategoriesCollection)Session["catArray"];
  188. UsersCollection selectedMembers = new UsersCollection();
  189. foreach (ListItem li in Members.Items)
  190. {
  191. if (li.Selected)
  192. {
  193. PMUser user = new PMUser();
  194. user.UserID = Convert.ToInt32(li.Value);
  195. selectedMembers.Add(user);
  196. }
  197. }
  198. Project prj = new Project(
  199. _projID, 
  200. ProjectName.Text,
  201. Description.Text, 
  202. Convert.ToInt32(Managers.SelectedItem.Value), 
  203. Convert.ToDateTime(CompletionDate.Text),
  204. Convert.ToDecimal(Duration.Text)
  205. );
  206. prj.Categories = catArray;
  207. prj.Members = selectedMembers;
  208. if (prj.Save())
  209. {
  210. ReturnToProjectList();
  211. }
  212. else
  213. {
  214. ErrorMessage.Text = "产生一个错误,你不能去除已经参与该项目进程的成员!";
  215. }
  216. }
  217. private void AddButton_Click(object sender, System.EventArgs e)
  218. {
  219. if (!AbbrevCustomValidator.IsValid)
  220. return;
  221. if (CategoryName.Text == "")
  222. {
  223. CategoryErrorMessage.Text = "Category name is required.";
  224. return;
  225. }
  226. if (Abbrev.Text == "")
  227. {
  228. CategoryErrorMessage.Text = "Category abbreviation is required.";
  229. return;
  230. }
  231. CategoriesCollection catArray = (CategoriesCollection)Session["catArray"];
  232. if (catArray == null) 
  233. catArray = new CategoriesCollection();
  234. int catID = (Session["catID"] != null) ? (Convert.ToInt32(Session["catID"]) - 1) : -1;
  235. Session["catID"] = catID;
  236. Category cat = new Category();
  237. cat.CategoryID = catID;
  238. cat.Name = CategoryName.Text;
  239. cat.Abbreviation = Abbrev.Text;
  240. cat.EstDuration = (CatDuration.Text.Length==0) ? 0 : Convert.ToDecimal(CatDuration.Text);
  241. catArray.Add(cat);
  242. ProjectsGridCustomValidator.Validate();
  243. BindCategoriesGrid(catArray);
  244. CategoryName.Text = string.Empty;
  245. Abbrev.Text = string.Empty;
  246. CatDuration.Text = string.Empty;
  247. }
  248. private void CopyButton_Click(object sender, System.EventArgs e)
  249. {
  250. int catID;
  251. CategoriesCollection catArray = (CategoriesCollection)Session["catArray"];
  252. if (catArray == null) 
  253. catArray = new CategoriesCollection();
  254. CategoriesCollection projcatArray = Project.GetCategories(Convert.ToInt32(Projects.SelectedItem.Value));
  255. foreach (Category cat in projcatArray)
  256. {
  257. catID = (Session["catID"] != null) ? (Convert.ToInt32(Session["catID"]) + 1) : 1;
  258. Session["catID"] = catID;
  259. cat.CategoryID = catID;
  260. catArray.Add(cat);
  261. }
  262. ProjectsGridCustomValidator.Validate();
  263. Session["catArray"] = catArray;
  264. BindCategoriesGrid(catArray);
  265. }
  266. protected void CategoriesGrid_OnDelete(Object sender, DataGridCommandEventArgs e)
  267. {
  268. int catID = Convert.ToInt32(CategoriesGrid.DataKeys[(int)e.Item.ItemIndex]);
  269. CategoriesCollection catArray = (CategoriesCollection)Session["catArray"];
  270. for (int i = 0;i < catArray.Count;i++)
  271. {
  272. if (((Category)catArray[i]).CategoryID == catID)
  273. {
  274. catArray.RemoveAt(i);
  275. }
  276. }
  277. BindCategoriesGrid(catArray);
  278. }
  279. protected void CategoriesGrid_OnCancel(Object sender, DataGridCommandEventArgs e)
  280. {
  281. CategoriesGrid.EditItemIndex = -1;
  282. BindCategoriesGrid((CategoriesCollection)Session["catArray"]);
  283. }
  284. protected void CategoriesGrid_OnUpdate(Object sender, DataGridCommandEventArgs e)
  285. {
  286. Category editCat = new Category();
  287. editCat.CategoryID = Convert.ToInt32(CategoriesGrid.DataKeys[(int)e.Item.ItemIndex]);
  288. editCat.Name = ((TextBox) e.Item.FindControl("EditName")).Text;
  289. editCat.Abbreviation = ((TextBox) e.Item.FindControl("EditAbbreviation")).Text;
  290. editCat.EstDuration = Convert.ToDecimal(((TextBox) e.Item.FindControl("EditDuration")).Text);
  291. CategoriesCollection catArray = (CategoriesCollection)Session["catArray"];
  292. if (catArray != null) 
  293. {
  294. string editAbbrev = ((TextBox) e.Item.FindControl("EditAbbreviation")).Text;
  295. foreach (Category cat in catArray)
  296. {
  297. if (cat.Abbreviation == editCat.Abbreviation && cat.CategoryID != editCat.CategoryID)
  298. {
  299. CategoryErrorMessage.Text = "项目进程简称不能重复!";
  300. return;
  301. }
  302. }
  303. }
  304. CategoriesCollection catNew = new CategoriesCollection();
  305. catNew.Add(editCat);
  306. if (catArray == null) 
  307. catArray = new CategoriesCollection();
  308. foreach (Category cat in catArray)
  309. {
  310. if (cat.CategoryID != editCat.CategoryID)
  311. {
  312. catNew.Add(cat);
  313. }
  314. }
  315. CategoriesGrid.EditItemIndex = -1;
  316. BindCategoriesGrid(catNew);
  317. }
  318. protected void CategoriesGrid_OnEdit(Object sender, DataGridCommandEventArgs e)
  319. {
  320. CategoriesGrid.EditItemIndex = e.Item.ItemIndex;
  321. BindCategoriesGrid((CategoriesCollection)Session["catArray"]);
  322. }
  323. private void CategoriesGrid_Sort(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
  324. {
  325. SortField = e.SortExpression;
  326. BindCategoriesGrid((CategoriesCollection)Session["catArray"]);
  327. }
  328. private void ValidateCategories(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
  329. {
  330. CategoriesCollection catArray = (CategoriesCollection)Session["catArray"];
  331. if (catArray != null) 
  332. {
  333. if (catArray.Count > 0)
  334. {
  335. args.IsValid = true;
  336. return;
  337. }
  338. }
  339. args.IsValid = false;
  340. }
  341. private void AbbrevCustomValidator_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
  342. {
  343. CategoriesCollection catArray = (CategoriesCollection)Session["catArray"];
  344. if (catArray.Count != 0) 
  345. {
  346. catArray.Sort(CategoriesCollection.CategoryFields.Abbreviation, true);
  347. for(int i=0; i < catArray.Count; i++)
  348. {
  349. if (((Category)catArray[i]).Abbreviation == Abbrev.Text)
  350. {
  351. args.IsValid = false;
  352. return;
  353. }
  354. if (i!=0 && ((Category)catArray[i]).Abbreviation == ((Category)catArray[i-1]).Abbreviation )
  355. {
  356. args.IsValid = false;
  357. return;
  358. }
  359. }
  360. }
  361. args.IsValid = true;
  362. }
  363. private void CategoriesGrid_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  364. {
  365. if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  366. {
  367. ((ImageButton)e.Item.FindControl("CatDeleteButton")).Attributes.Add("onclick", "return confirm('删除此条项目进程将删除相关的进程日志或进程信息,确认在删除吗?')");
  368. }
  369. }
  370. string SortField 
  371. {
  372. get 
  373. {
  374. object o = ViewState["SortField"];
  375. if (o == null) 
  376. {
  377. return String.Empty;
  378. }
  379. return (string)o;
  380. }
  381. set 
  382. {
  383. if (value == SortField) 
  384. {
  385. SortAscending = !SortAscending;
  386. }
  387. ViewState["SortField"] = value;
  388. }
  389. }
  390. bool SortAscending 
  391. {
  392. get 
  393. {
  394. object o = ViewState["SortAscending"];
  395. if (o == null) 
  396. {
  397. return true;
  398. }
  399. return (bool)o;
  400. }
  401. set 
  402. {
  403. ViewState["SortAscending"] = value;
  404. }
  405. }
  406. }
  407. }