using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WebLib; namespace Education.Forms.組織 { public partial class 組織圖處理 : FormBase { private int 組織類別Id; protected void Page_Load(object sender, EventArgs e) { FunctionName = "組織圖處理"; if (!IsPostBack) ddl組織類別.DataBind(); } protected bool CheckInput() { if (txtNodeText.Text.Trim().Length == 0) { lbError.Text = "請輸入組織名稱"; return false; } else { lbError.Text = ""; return true; } } protected 組織圖 New組織圖Item(int 上層ID) { 組織圖 result = new 組織圖(); result.上層ID = 上層ID; result.組織類別ID = DAC.GetInt32(ddl組織類別.SelectedValue); result.組織名稱 = txtNodeText.Text; result.DB_CRUSR = UserId; result.部門主管 = ddl主管.SelectedValue; result.組織ID = Dao組織圖.InsertOne(result); return result; } protected void btnAddRoot_Click(object sender, EventArgs e) { if (!CheckInput()) return; 組織圖 newItem = New組織圖Item(0); TreeNode newNode = new TreeNode(txtNodeText.Text); newNode.Value = newItem.組織ID.ToString(); TV.Nodes.Add(newNode); newNode.Selected = true; } protected void btnAdd_Click(object sender, EventArgs e) { if (!CheckInput()) return; if (TV.SelectedNode == null || TV.SelectedNode.Parent == null) btnAddRoot_Click(sender, e); else { 組織圖 newItem = New組織圖Item(DAC.GetInt32(TV.SelectedNode.Parent.Value)); TreeNode newNode = new TreeNode(txtNodeText.Text); newNode.Value = newItem.組織ID.ToString(); TV.SelectedNode.Parent.ChildNodes.Add(newNode); newNode.Selected = true; } } protected void btnAddDown_Click(object sender, EventArgs e) { if (!CheckInput()) return; if (TV.SelectedNode == null) btnAddRoot_Click(sender, e); else { 組織圖 newItem = New組織圖Item(DAC.GetInt32(TV.SelectedNode.Value)); TreeNode newNode = new TreeNode(txtNodeText.Text); newNode.Value = newItem.組織ID.ToString(); TV.SelectedNode.ChildNodes.Add(newNode); TV.SelectedNode.Expand(); newNode.Selected = true; } } protected void btnUpdate_Click(object sender, EventArgs e) { if (TV.SelectedNode == null) return; TV.SelectedNode.Text = txtNodeText.Text; 組織圖List values = Dao組織圖.SelectOne(DAC.GetInt32(TV.SelectedNode.Value)); if (values.Count == 0) return; values[0].組織名稱 = txtNodeText.Text; values[0].部門主管 = ddl主管.SelectedValue; values[0].DB_TRUSR = UserId; Dao組織圖.UpdateOne(values[0]); } protected void btnDelete_Click(object sender, EventArgs e) { if (TV.SelectedNode == null) return; if (TV.SelectedNode.ChildNodes.Count > 0) return; int delId = DAC.GetInt32(TV.SelectedNode.Value); 組織圖List values = Dao組織圖.SelectOne(DAC.GetInt32(TV.SelectedNode.Value)); if (values.Count == 0) return; Dao組織圖.DeleteOne(values[0]); if (TV.SelectedNode.Parent == null) { TV.Nodes.Remove(TV.SelectedNode); } else { TV.SelectedNode.Parent.ChildNodes.Remove(TV.SelectedNode); } } protected void Update排序(TreeNodeCollection nodes) { for (int i = 0; i < nodes.Count; i++) { Dao組織圖.Update排序(DAC.GetInt32(nodes[i].Value), i + 1, UserId); } } protected void btnUp_Click(object sender, EventArgs e) { if (TV.SelectedNode == null) return; if (TV.SelectedNode.Parent == null) { TreeNode node = TV.SelectedNode; int thisIndex = TV.Nodes.IndexOf(node); if (thisIndex == 0) return; TV.Nodes.Remove(node); TV.Nodes.AddAt(thisIndex - 1, node); node.Selected = true; Update排序(TV.Nodes); } else { TreeNode node = TV.SelectedNode; TreeNode parent = node.Parent; int thisIndex = parent.ChildNodes.IndexOf(node); if (thisIndex == 0) return; parent.ChildNodes.Remove(node); parent.ChildNodes.AddAt(thisIndex - 1, node); node.Selected = true; Update排序(parent.ChildNodes); } } protected void btnDown_Click(object sender, EventArgs e) { if (TV.SelectedNode == null) return; if (TV.SelectedNode.Parent == null) { TreeNode node = TV.SelectedNode; int thisIndex = TV.Nodes.IndexOf(node); if (thisIndex == TV.Nodes.Count - 1) return; TV.Nodes.Remove(node); TV.Nodes.AddAt(thisIndex + 1, node); node.Selected = true; Update排序(TV.Nodes); } else { TreeNode node = TV.SelectedNode; TreeNode parent = node.Parent; int thisIndex = parent.ChildNodes.IndexOf(node); if (thisIndex == parent.ChildNodes.Count - 1) return; parent.ChildNodes.Remove(node); parent.ChildNodes.AddAt(thisIndex + 1, node); node.Selected = true; Update排序(parent.ChildNodes); } } protected void btnUpLevel_Click(object sender, EventArgs e) { if (TV.SelectedNode == null) return; if (TV.SelectedNode.Parent == null) return; TreeNode node = TV.SelectedNode; TreeNode parent = node.Parent; TreeNode parentParent = node.Parent.Parent; if (parentParent == null) { parent.ChildNodes.Remove(node); TV.Nodes.AddAt(TV.Nodes.IndexOf(parent) + 1, node); node.Selected = true; Dao組織圖.Update上層ID(DAC.GetInt32(node.Value), 0, UserId); Update排序(TV.Nodes); } else { parent.ChildNodes.Remove(node); parentParent.ChildNodes.AddAt(parentParent.ChildNodes.IndexOf(parent) + 1, node); node.Selected = true; Dao組織圖.Update上層ID(DAC.GetInt32(node.Value), DAC.GetInt32(parentParent.Value), UserId); Update排序(parentParent.ChildNodes); } } protected void btnDownLevel_Click(object sender, EventArgs e) { if (TV.SelectedNode == null) return; TreeNode node = TV.SelectedNode; TreeNode parent = node.Parent; if (parent == null) { int thisIndex = TV.Nodes.IndexOf(node); if (thisIndex == 0) return; TV.Nodes.Remove(node); TV.Nodes[thisIndex - 1].ChildNodes.Add(node); TV.Nodes[thisIndex - 1].Expand(); node.Selected = true; Dao組織圖.Update上層ID(DAC.GetInt32(node.Value), DAC.GetInt32(TV.Nodes[thisIndex - 1].Value), UserId); Update排序(TV.Nodes[thisIndex - 1].ChildNodes); } else { int thisIndex = parent.ChildNodes.IndexOf(node); if (thisIndex == 0) return; parent.ChildNodes.Remove(node); parent.ChildNodes[thisIndex - 1].ChildNodes.Add(node); parent.ChildNodes[thisIndex - 1].Expand(); node.Selected = true; Dao組織圖.Update上層ID(DAC.GetInt32(node.Value), DAC.GetInt32(parent.ChildNodes[thisIndex - 1].Value), UserId); Update排序(parent.ChildNodes[thisIndex - 1].ChildNodes); } } protected void btnSelect組織類別_Click(object sender, EventArgs e) { 組織類別Id = DAC.GetInt32(ddl組織類別.SelectedValue); Dao組織圖.DrawTree(TV, 組織類別Id); pnl組織圖.Visible = true; TV.ExpandAll(); if (TV.Nodes.Count > 0) { TV.Nodes[0].Select(); TV_SelectedNodeChanged(sender, e); } } protected void TV_SelectedNodeChanged(object sender, EventArgs e) { ddl主管.DataBind(); if (TV.SelectedNode == null) { txtNodeText.Text = ""; return; } txtNodeText.Text = TV.SelectedNode.Text; // 20181023 檢查部門主管是否在部門人員中,若有才設定 dropdown 的值 組織圖 dept = Dao組織圖.SelectOne(DAC.GetInt32(TV.SelectedNode.Value)).FirstOrDefault(); if (dept != null && ddl主管.Items.FindByValue(dept.部門主管) != null) ddl主管.SelectedValue = dept.部門主管; } } }