/// <summary>
        /// GenerateXml
        /// </summary>
        /// <param name="folderName"></param>
        public static void GenerateXml(string folderName)
        {
            using (NH.INHibernateRepository rep = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository <WindowInfo>() as NH.INHibernateRepository)
            {
                var windows = rep.Session.CreateCriteria <WindowInfo>()
                              .Add(NHibernate.Criterion.Expression.Eq("IsActive", true))
                              .List <WindowInfo>();

                foreach (var window in windows)
                {
                    GenerateWindowXml(folderName + "\\Window\\" + window.Name + ".xml", window);
                }

                System.Data.DataTable dt = Feng.Data.DbHelper.Instance.ExecuteDataTable("SELECT DISTINCT GRIDNAME FROM AD_WINDOW_TAB");
                foreach (System.Data.DataRow row in dt.Rows)
                {
                    string gridName = row[0].ToString();

                    GenerateGridXml(folderName + "\\Grid\\" + gridName + ".xml", gridName);
                }
            }
        }
        /// <summary>
        /// GenerateGridXml
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="gridName"></param>
        public static string GenerateGridXml(string fileName, string gridName)
        {
            using (NH.INHibernateRepository rep = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository <GridColumnInfo>() as NH.INHibernateRepository)
            {
                XmlDocument xmlDoc = new XmlDocument();
                // Write down the XML declaration
                XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);

                // Create the root element
                XmlElement rootNode = xmlDoc.CreateElement("Grid");
                rootNode.SetAttribute("GridName", ProcessXmlString(gridName));
                xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);
                xmlDoc.AppendChild(rootNode);

                var gridColumns = rep.Session.CreateCriteria <GridColumnInfo>()
                                  .Add(NHibernate.Criterion.Expression.Eq("IsActive", true))
                                  .Add(NHibernate.Criterion.Expression.Eq("GridName", gridName))
                                  .AddOrder(NHibernate.Criterion.Order.Asc("SeqNo"))
                                  .List <GridColumnInfo>();
                foreach (var gridColumn in gridColumns)
                {
                    XmlElement columnNode = xmlDoc.CreateElement("GridColumn");
                    columnNode.SetAttribute("Name", ProcessXmlString(gridColumn.Name));
                    columnNode.SetAttribute("Caption", ProcessXmlString(gridColumn.Caption));
                    columnNode.SetAttribute("Help", ProcessXmlString(gridColumn.Help));
                    columnNode.SetAttribute("Description", ProcessXmlString(gridColumn.Description));
                    columnNode.SetAttribute("IsDataControl", (gridColumn.GridColumnType != GridColumnType.NoColumn).ToString());
                    columnNode.SetAttribute("IsSearchControl", (!string.IsNullOrEmpty(gridColumn.SearchControlType)).ToString());
                    rootNode.AppendChild(columnNode);
                }

                var grids = rep.Session.CreateCriteria <GridInfo>()
                            .Add(NHibernate.Criterion.Expression.Eq("IsActive", true))
                            .Add(NHibernate.Criterion.Expression.Eq("GridName", gridName))
                            .List <GridInfo>();
                foreach (var grid in grids)
                {
                    XmlElement gridNode = xmlDoc.CreateElement("Grid");
                    gridNode.SetAttribute("Name", ProcessXmlString(grid.Name));
                    gridNode.SetAttribute("Help", ProcessXmlString(grid.Help));
                    gridNode.SetAttribute("Description", ProcessXmlString(grid.Description));
                    rootNode.AppendChild(gridNode);
                }

                var gridRows = rep.Session.CreateCriteria <GridRowInfo>()
                               .Add(NHibernate.Criterion.Expression.Eq("IsActive", true))
                               .Add(NHibernate.Criterion.Expression.Eq("GridName", gridName))
                               .List <GridRowInfo>();
                foreach (var gridRow in gridRows)
                {
                    XmlElement rowNode = xmlDoc.CreateElement("GridRow");
                    rowNode.SetAttribute("Name", ProcessXmlString(gridRow.Name));
                    rowNode.SetAttribute("Help", ProcessXmlString(gridRow.Help));
                    rowNode.SetAttribute("Description", ProcessXmlString(gridRow.Description));
                    rootNode.AppendChild(rowNode);
                }

                var gridCells = rep.Session.CreateCriteria <GridCellInfo>()
                                .Add(NHibernate.Criterion.Expression.Eq("IsActive", true))
                                .Add(NHibernate.Criterion.Expression.Eq("GridName", gridName))
                                .List <GridCellInfo>();
                foreach (var gridCell in gridCells)
                {
                    XmlElement cellNode = xmlDoc.CreateElement("GridCell");
                    cellNode.SetAttribute("Name", ProcessXmlString(gridCell.Name));
                    cellNode.SetAttribute("Help", ProcessXmlString(gridCell.Help));
                    cellNode.SetAttribute("Description", ProcessXmlString(gridCell.Description));
                    rootNode.AppendChild(cellNode);
                }

                xmlDoc.Save(fileName);
                return(fileName);
            }
        }