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();
        }