/// <summary>
        /// 加载配置文件,默认路径config.xml
        /// </summary>
        private void Load()
        {
            dataGridStyles = new Dictionary<string, DataGridStyle>();
            xmlDoc = new XmlDocument();
            if (File.Exists(filePath))
            {
                xmlDoc.Load(filePath);
                XmlNode node = xmlDoc.SelectSingleNode("Config/DataGridViews");
                XmlNodeList nodeList = node.SelectNodes("DataGridView");
                XmlNodeList columnNodes;
                ColumnStyle columnStyle;
                DataGridStyle dataGridStyle;
                int index;
                foreach (XmlNode _node in nodeList)
                {
                    dataGridStyle = new DataGridStyle();
                    dataGridStyle.TableName = _node.Attributes["tablename"].Value.ToString();
                    columnNodes = _node.ChildNodes;
                    index = 0;
                    foreach (XmlNode columnNode in columnNodes)
                    {
                        columnStyle = new ColumnStyle();
                        columnStyle.Name = columnNode.Attributes["name"].Value;
                        columnStyle.DisplayName = columnNode.Attributes["displayname"].Value;
                        columnStyle.Width = Convert.ToUInt16(columnNode.Attributes["width"].Value);
                        columnStyle.Visible = Convert.ToBoolean(columnNode.Attributes["visible"].Value);
                        columnStyle.Alignment = (DataGridViewContentAlignment)Convert.ToInt32(columnNode.Attributes["alignment"].Value);
                        if (columnNode.Attributes["show"] != null)
                            columnStyle.Show = Convert.ToBoolean(columnNode.Attributes["show"].Value);
                        else
                            columnStyle.Show = true;
                        columnStyle.Index = index;
                        index++;

                        if (!dataGridStyle.ColumnStyles.ContainsKey(columnStyle.Name))
                            dataGridStyle.ColumnStyles.Add(columnStyle.Name, columnStyle);
                        else
                            dataGridStyle.ColumnStyles[columnStyle.Name] = columnStyle;
                    }
                    dataGridStyles.Add(dataGridStyle.TableName, dataGridStyle);
                }
            }
            else
                CreateConfig();
        }
        /// <summary>删除失踪的列DevExpress</summary>
        private void DeleteMissColumn(DataGridStyle dataGridStyle, DevExpress.XtraGrid.Views.Grid.GridView gridView)
        {
            Dictionary<string, string> dict = new Dictionary<string, string>();
            foreach (DevExpress.XtraGrid.Columns.GridColumn column in gridView.Columns)
            {
                if (dataGridStyle.ColumnStyles.ContainsKey(column.Name))
                    dict.Add(column.Name, column.Name);
            }

            string[] keys = new string[dataGridStyle.ColumnStyles.Count];
            dataGridStyle.ColumnStyles.Keys.CopyTo(keys, 0);

            for (int i = keys.Length - 1; i >= 0; i--)
            {
                if (!dict.ContainsKey(keys[i]))
                    dataGridStyle.ColumnStyles.Remove(keys[i]);
            }

            int index = 0;
            foreach (string key in dataGridStyle.ColumnStyles.Keys)
            {
                dataGridStyle.ColumnStyles[key].Index = index;
                index++;
            }
        }
        /// 保存新的表格样式DevExpress
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="gridView"></param>   
        private void SaveNewGridStyle(string tableName, DevExpress.XtraGrid.Views.Grid.GridView gridView)
        {
            ColumnStyle columnStyle;
            DataGridStyle dataGridStyle = new DataGridStyle();
            dataGridStyle.TableName = tableName;
            foreach (DevExpress.XtraGrid.Columns.GridColumn column in gridView.Columns)
            {
                columnStyle = GetColumnStyle(column);
                dataGridStyle.ColumnStyles.Add(columnStyle.Name, columnStyle);
            }

            SaveGridStyle(dataGridStyle);
        }
        private XmlElement GetDataGridViewElement(DataGridStyle dataGridStyle)
        {
            XmlElement element = xmlDoc.CreateElement("DataGridView");
            element.SetAttribute("tablename", dataGridStyle.TableName);
            XmlElement child;
            ColumnStyle column;
            foreach (string key in dataGridStyle.ColumnStyles.Keys)
            {
                column = dataGridStyle.ColumnStyles[key];
                child = xmlDoc.CreateElement("ColumnStyle");
                child.SetAttribute("name", column.Name);
                child.SetAttribute("displayname", column.DisplayName);
                child.SetAttribute("width", column.Width.ToString());
                child.SetAttribute("visible", column.Visible.ToString());
                child.SetAttribute("alignment", ((int)column.Alignment).ToString());
                child.SetAttribute("show", column.Show.ToString());

                element.AppendChild(child);
            }

            return element;
        }
        /// <summary>
        /// 保存或更新样式
        /// </summary>
        /// <param name="dataGridStyle">表样式类</param>
        public void SaveGridStyle(DataGridStyle dataGridStyle)
        {
            if (!dataGridStyles.ContainsKey(dataGridStyle.TableName))
                dataGridStyles.Add(dataGridStyle.TableName, dataGridStyle);
            else
                dataGridStyles[dataGridStyle.TableName] = dataGridStyle;

            XmlElement element = GetDataGridViewElement(dataGridStyle);

            XmlNode node = xmlDoc.SelectSingleNode("Config/DataGridViews");
            string tablename;
            bool isReplaced = false;
            foreach (XmlNode _node in node.ChildNodes)
            {
                tablename = _node.Attributes["tablename"].Value;
                if (string.Compare(tablename, dataGridStyle.TableName,true)==0)
                {
                    node.ReplaceChild(element, _node);
                    isReplaced = true;
                    break;
                }
            }
            if (!isReplaced)
                node.AppendChild(element);

            xmlDoc.Save(filePath);
        }
        /// <summary>
        /// 保存或更新表格样式
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="styleGridView">样式表格控件</param>
        public void SaveGridStyle(string tableName, DataGridView styleGridView)
        {
            DataGridStyle dataGridStyle = new DataGridStyle();
            dataGridStyle.TableName = tableName;
            ColumnStyle columnStyle;
            int index = 0;
            foreach (DataGridViewRow dr in styleGridView.Rows)
            {
                columnStyle = new ColumnStyle();
                columnStyle.Name = dr.Cells["name"].Value.ToString();
                columnStyle.DisplayName = dr.Cells["列名"].Value.ToString();
                columnStyle.Width = Convert.ToUInt16(dr.Cells["列宽"].Value);
                columnStyle.Visible = Convert.ToBoolean(dr.Cells["可见性"].Value);
                columnStyle.Alignment = GetAlignment(dr.Cells["对齐方式"].Value.ToString());
                columnStyle.Show = dr.Visible;
                columnStyle.Index = index;
                index++;
                dataGridStyle.ColumnStyles.Add(columnStyle.Name, columnStyle);
            }

            SaveGridStyle(dataGridStyle);
        }