private void item_click(object sender, EventArgs e) { if (_RunningItem == null) { _RunningItem = new ButtonItem(); } ButtonItem item = sender as ButtonItem; //判斷切換的item是否相同 if (!_RunningItem.Equals(item)) { //切換前將dgv.rows存到tag中 _RunningItem.Tag = new ButtonTag(dgv); //切換 _RunningItem = item; string subject = item.Text; dgv.Rows.Clear(); //item.Tag == ""代表此item未被編輯過,做初始設定 if (item.Tag + "" == "") { foreach (XmlElement conduct in _doc.SelectNodes("//Conduct[@Subject=" + Tool.XPathLiteral(subject) + "]")) { string group = conduct.GetAttribute("Group"); foreach (XmlElement itemx in conduct.SelectNodes("Item")) { string title = itemx.GetAttribute("Title"); DataGridViewRow row = new DataGridViewRow(); row.CreateCells(dgv, group, title); dgv.Rows.Add(row); } } } else { //tag!=""就讀取tag ButtonTag tag = item.Tag as ButtonTag; foreach (DataGridViewRow row in tag.Rows) { dgv.Rows.Add(row); } } } }
private void btnSave_Click(object sender, EventArgs e) { //刪除科目不存在的ConductTemplate foreach (XmlNode node in _doc.SelectNodes("//Conduct[@Subject]")) { XmlElement elem = node as XmlElement; string subject = elem.GetAttribute("Subject"); if (!_subjects.Contains(subject)) { _doc.DocumentElement.RemoveChild(node); } } //最後被編輯的item先將資料存到tag if (itemPanle1.SelectedItems.Count == 1) { itemPanle1.SelectedItems[0].Tag = new ButtonTag(dgv); } foreach (ButtonItem buttonItem in itemPanle1.Items) { //buttonItem.Tag == ""代表此item從未被編輯過 if (buttonItem.Tag + "" != "") { string subject = buttonItem.Text; //刪除該subject的節點 foreach (XmlNode node in _doc.SelectNodes("//Conduct[@Subject=" + Tool.XPathLiteral(subject) + "]")) { _doc.DocumentElement.RemoveChild(node); } ButtonTag tag = buttonItem.Tag as ButtonTag; List <string> check_list = new List <string>(); //foreach (DataGridViewRow row in dgv.Rows) foreach (DataGridViewRow row in tag.Rows) { if (row.IsNewRow) { continue; } string group = row.Cells[colGroup.Index].Value + ""; string title = row.Cells[colTitle.Index].Value + ""; string key = group + "_" + title; XmlElement newElem = _doc.SelectSingleNode("//Conduct[@Group=" + Tool.XPathLiteral(group) + "][@Subject=" + Tool.XPathLiteral(subject) + "]") as XmlElement; if (newElem == null) { newElem = _doc.CreateElement("Conduct"); newElem.SetAttribute("Group", group); newElem.SetAttribute("Subject", subject); _doc.DocumentElement.AppendChild(newElem); } //同group避免重複add相同item if (!check_list.Contains(key)) { XmlElement item = newElem.OwnerDocument.CreateElement("Item"); item.SetAttribute("Title", title); //newElem.SetAttribute("Group", group); newElem.AppendChild(item); check_list.Add(key); } } } } _setting.Conduct = _doc.OuterXml; _setting.Save(); this.Close(); }