Exemplo n.º 1
0
        private void buttonCreate_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(docName))
            {
                try
                {
                    Assembly assembly = typeof(IPageInstance).Module.Assembly;
                    AssemblyRefCreator.AssemblyRefCreateator(assembly, docName);

                    #region nodes cration

                    foreach (DataGridViewRow row in dataGridNodesTable.Rows)
                    {
                        DataRowComponents rowData      = (DataRowComponents)row.Cells["DataSource"].Value;
                        XmlNode           insertedNode = rowData.Tag as XmlNode;
                        Uri        uri     = new Uri(docName);
                        XmlElement newNode = insertedNode.OwnerDocument.CreateElement("Compile", insertedNode.NamespaceURI);

                        string insertedNodeName       = insertedNode.Attributes.GetNamedItem("Include").Value;
                        string parsedInsertedNodeName = insertedNodeName;

                        parsedInsertedNodeName = Path.GetFileName(insertedNodeName);

                        newNode.SetAttribute("Include", insertedNodeName.Replace("aspx.cs", "aspx.jaz.cs"));

                        XmlElement dependentUponNode =
                            insertedNode.OwnerDocument.CreateElement("DependentUpon", insertedNode.NamespaceURI);
                        dependentUponNode.InnerText = parsedInsertedNodeName.Replace(".aspx.cs", ".aspx");
                        newNode.AppendChild(dependentUponNode);

                        if ((bool)row.Cells["Existing jaz files"].Value)
                        {
                            if (insertedNode.ParentNode.SelectNodes("*[@Include='" +
                                                                    insertedNodeName.Replace(OldFileExtension, NewFileExtension) + "']").Count == 0)
                            {
                                insertedNode.ParentNode.InsertAfter(newNode, insertedNode);
                                insertedNode.OwnerDocument.Save(docName);
                                string fileFullPath = docName.Replace(uri.Segments[uri.Segments.Length - 1].ToString(), "") +
                                                      insertedNode.Attributes.GetNamedItem("Include").Value
                                                      .Replace(OldFileExtension, NewFileExtension);
                                progectSettings.AddNewJazFile(fileFullPath);
                                FileInfo   newFile = new FileInfo(fileFullPath);
                                FileStream fs      = newFile.Create();
                                fs.Dispose();
                                CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
                                string          ns       = row.Cells["Guessed namespace"].Value.ToString();
                                string          cn       = row.Cells["Guessed class name"].Value.ToString();
                                FileGenerator.GenerateCode
                                (
                                    provider,
                                    FileGenerator.BuildJAZContent(ns, cn, insertedNodeName),
                                    fileFullPath
                                );
                                string           exportFilePath = Path.Combine(Path.GetDirectoryName(docName), "ExportSetting.xml");
                                PageSettings     pageSet        = new PageSettings(exportFilePath, insertedNodeName, ns, cn);
                                XmlStoreProvider storeProvider  = new XmlStoreProvider(exportFilePath);
                                progectSettings.SelectedPage = pageSet;
                                storeProvider.SaveSettings(progectSettings);
                            }
                        }
                        else
                        {
                            XmlNode removedNode = insertedNode.ParentNode.SelectSingleNode("*[@Include='" +
                                                                                           insertedNodeName.Replace(OldFileExtension, NewFileExtension) + "']");
                            if (removedNode != null)
                            {
                                insertedNode.ParentNode.RemoveChild(removedNode);
                                insertedNode.OwnerDocument.Save(docName);
                                string unselectedFileName = docName.Replace(uri.Segments[uri.Segments.Length - 1].ToString(), "") +
                                                            insertedNode.Attributes.GetNamedItem("Include").Value
                                                            .Replace(OldFileExtension, NewFileExtension);
                                FileInfo newFile = new FileInfo(unselectedFileName);
                                newFile.Delete();

                                if (progectSettings.GetJazFileCollection().Contains(unselectedFileName))
                                {
                                    progectSettings.RemoveJazFileFromCollection(unselectedFileName);
                                }
                            }
                        }
                    }
                    MessageBox.Show("Modify proccess successed", "executed", MessageBoxButtons.OK);
                    #endregion
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    dataGridNodesTable.Rows.Clear();
                    dataGridNodesTable.Columns.Clear();
                }
            }
        }
Exemplo n.º 2
0
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dataGridNodesTable.Rows.Clear();
            dataGridNodesTable.Columns.Clear();

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.InitialDirectory = "c:\\";
            ofd.Filter           = "project files (*.csproj)|*.csproj|All files (*.*)|*.*";
            ofd.FilterIndex      = 1;
            ofd.RestoreDirectory = true;

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    #region CheckBox list creator

                    progectSettings = new ProjectSettings();

                    dataGridNodesTable.UseWaitCursor = true;
                    XmlDocument doc = new XmlDocument();
                    docName = ofd.FileName.ToString();
                    doc.Load(docName);
                    XmlDocument docExport      = new XmlDocument();
                    string      exportFilePath = Path.Combine(Path.GetDirectoryName(docName), "ExportSetting.xml");
                    progectSettings.ExportFileName = exportFilePath;

                    XmlNode root = doc.DocumentElement;

                    XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
                    nsmgr.AddNamespace("ns", root.NamespaceURI);

                    Assembly assembly = typeof(IPageInstance).Module.Assembly;
                    progectSettings.IsRefJCMSAdded = AssemblyRefCreator.IsAssemblyRefAdded(assembly, docName);
                    progectSettings.AddBasePageToCollection("test");
                    progectSettings.AddBasePageToCollection("test2");


                    XmlNode nameSpace = root.SelectSingleNode("//ns:RootNamespace", nsmgr);
                    jazNamespace = nameSpace.InnerText;
                    progectSettings.RootNameSpace = jazNamespace;

                    XmlNodeList    nodeList       = root.SelectNodes("//ns:Compile", nsmgr);
                    List <XmlNode> nodeCollection = new List <XmlNode>();
                    foreach (XmlNode node in nodeList)
                    {
                        if (node.Attributes.GetNamedItem("Include").Value.Contains(OldFileExtension))
                        {
                            nodeCollection.Add(node);
                        }
                    }

                    List <DataRowComponents> dataRowCollection = new List <DataRowComponents>();

                    foreach (XmlNode selectedNodes in nodeCollection)
                    {
                        DataRowComponents dataRow = new DataRowComponents();
                        dataRow.IsSelected = false;

                        string location = selectedNodes.Attributes.GetNamedItem("Include").Value;

                        dataRow.Text = location;
                        string      xPath        = "//ns:Compile[@Include='" + location.Replace(OldFileExtension, NewFileExtension) + "']";
                        XmlNodeList jazNodesList = root.SelectNodes(xPath, nsmgr);
                        jazClassName = Path.GetFileName(location).Replace(OldFileExtension, "");
                        string directory        = Path.GetDirectoryName(location).Replace("\\", ".");
                        string jazNamespaceNode = jazNamespace;
                        if (!string.IsNullOrEmpty(directory))
                        {
                            jazNamespaceNode = jazNamespace + "." + directory;
                        }

                        dataRow.Namespace = jazNamespaceNode;
                        dataRow.ClassName = jazClassName;

                        string           exFilePath    = Path.Combine(Path.GetDirectoryName(docName), "ExportSetting.xml");
                        PageSettings     pageSet       = new PageSettings(exFilePath, location);
                        XmlStoreProvider storeProvider = new XmlStoreProvider(exFilePath);
                        progectSettings.SelectedPage = pageSet;
                        storeProvider.LoadSettings(progectSettings);

                        if (progectSettings.IsSetted)
                        {
                            dataRow.Namespace = progectSettings.SelectedPage.NameSpace;
                            dataRow.ClassName = progectSettings.SelectedPage.ClassName;
                        }

                        if (jazNodesList.Count > 0)
                        {
                            dataRow.IsSelected = true;
                        }

                        dataRow.Tag      = selectedNodes;
                        dataRow.BasePage = "test2";
                        dataRowCollection.Add(dataRow);
                    }


                    dataGridNodesTable.AutoGenerateColumns = false;

                    DataSet   dataSet           = new DataSet("JazCmsDataSet");
                    DataTable dataTable         = new DataTable("DataRowComponentsCollection");
                    DataTable basePageListTable = new DataTable("BasePageListTable");
                    basePageListTable.Columns.Add("BasePage", typeof(string));

                    foreach (string page in progectSettings.BasePageCollection)
                    {
                        basePageListTable.Rows.Add(page);
                    }

                    List <string> hiddenColumns = new List <string>();

                    foreach (PropertyInfo property in typeof(DataRowComponents).GetProperties())
                    {
                        Type type = property.PropertyType;
                        DisplayNameAttribute[] propertyArrey = (DisplayNameAttribute[])
                                                               (property.GetCustomAttributes(typeof(DisplayNameAttribute), true));

                        HidePropertyAttribute[] hidePropertyArrey = (HidePropertyAttribute[])
                                                                    (property.GetCustomAttributes(typeof(HidePropertyAttribute), true));

                        DataColumn col;
                        if (propertyArrey.Count() != 0)
                        {
                            col = new DataColumn(propertyArrey.First().DisplayName, type);
                        }
                        else
                        {
                            col = new DataColumn(property.Name, type);
                        }

                        dataTable.Columns.Add(col);

                        if (hidePropertyArrey.Count() != 0 && hidePropertyArrey.First().IsHidden)
                        {
                            hiddenColumns.Add(col.ColumnName);
                        }
                    }

                    DataColumn dataSource = new DataColumn("DataSource", typeof(DataRowComponents));
                    dataTable.Columns.Add(dataSource);

                    foreach (DataRowComponents row in dataRowCollection)
                    {
                        dataTable.Rows.Add(row.IsSelected, row.Text, row.ClassName, row.Namespace, row.BasePage, row.Tag, row);
                    }

                    dataSet.Tables.Add(dataTable);
                    dataSet.Tables.Add(basePageListTable);

                    DataColumn child  = dataSet.Tables["DataRowComponentsCollection"].Columns["Custom base page"];
                    DataColumn parent = dataSet.Tables["BasePageListTable"].Columns["BasePage"];
                    parent.Unique = true;
                    ForeignKeyConstraint fk = new ForeignKeyConstraint("FK_BasePage", parent, child);
                    dataSet.Tables["DataRowComponentsCollection"].Constraints.Add(fk);
                    dataSet.Relations.Add("BasePage",
                                          parent,
                                          child);

                    DataRelationCollection            relationCollection = dataSet.Relations;
                    SortedList <string, DataRelation> relCollection      = new SortedList <string, DataRelation>();

                    foreach (DataRelation rel in relationCollection)
                    {
                        if (rel.ChildTable.TableName == "DataRowComponentsCollection")
                        {
                            relCollection.Add(rel.ChildColumns.First().ColumnName, rel);
                        }
                    }

                    foreach (DataColumn col in
                             dataTable.Columns)
                    {
                        if (relCollection.Keys.Contains(col.ColumnName))
                        {
                            DataColumn parentColumn = relCollection.Where(p => p.Key == col.ColumnName)
                                                      .Select(p => p.Value).First().ParentColumns.First();

                            DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn();
                            comboBoxColumn.Name = col.ColumnName;

                            List <string> sourceList = new List <string>();
                            foreach (DataRow dgvRow in parentColumn.Table.Rows)
                            {
                                sourceList.Add(dgvRow[parentColumn.ColumnName].ToString());
                            }

                            comboBoxColumn.DataSource = sourceList.ToArray();
                            dataGridNodesTable.Columns.Add(comboBoxColumn);

                            if (hiddenColumns.Contains(col.ColumnName))
                            {
                                comboBoxColumn.Visible = false;
                            }
                        }
                        else
                        if (col.DataType == typeof(bool))
                        {
                            DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
                            checkBoxColumn.Name = col.ColumnName;
                            dataGridNodesTable.Columns.Add(checkBoxColumn);

                            if (hiddenColumns.Contains(col.ColumnName))
                            {
                                checkBoxColumn.Visible = false;
                            }
                        }
                        else
                        if (col.DataType == typeof(string))
                        {
                            DataGridViewTextBoxColumn textBoxColumn = new DataGridViewTextBoxColumn();
                            textBoxColumn.Name = col.ColumnName;
                            dataGridNodesTable.Columns.Add(textBoxColumn);

                            if (hiddenColumns.Contains(col.ColumnName))
                            {
                                textBoxColumn.Visible = false;
                            }
                        }
                        else
                        {
                            DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
                            column.Name = col.ColumnName;
                            dataGridNodesTable.Columns.Add(column);
                            column.Visible = false;

                            if (hiddenColumns.Contains(col.ColumnName))
                            {
                                column.Visible = false;
                            }
                        }
                    }

                    foreach (DataRowComponents row in dataRowCollection)
                    {
                        dataGridNodesTable.Rows.Add(
                            row.IsSelected, row.Text, row.ClassName, row.Namespace
                            , row.BasePage,
                            row.Tag, row
                            );
                    }

                    dataGridNodesTable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
                    dataGridNodesTable.Columns["Path to file"].ReadOnly = true;
                    dataGridNodesTable.Columns["Tag"].Visible           = false;

                    DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn();
                    buttonColumn.Name = "Details";
                    dataGridNodesTable.Columns.Add(buttonColumn);

                    foreach (DataGridViewRow row in dataGridNodesTable.Rows)
                    {
                        if ((bool)row.Cells["Existing jaz files"].Value)
                        {
                            row.Cells["Guessed class name"].ReadOnly = true;
                            row.Cells["Guessed namespace"].ReadOnly  = true;
                        }

                        row.Cells["Details"].Value = "...";
                    }

                    #endregion

                    buttonCreate.Top  = dataGridNodesTable.Height + 100;
                    buttonCreate.Left = dataGridNodesTable.Left + dataGridNodesTable.Width - buttonCreate.Width;
                    dataGridNodesTable.UseWaitCursor = false;

                    foreach (ToolStripMenuItem item in contextMenuStripDataGridView.Items)
                    {
                        item.CheckedChanged +=
                            new EventHandler(contextMenuStripDataGridView_CheckedChanged);
                        switch (item.Text)
                        {
                        case "Class name": item.Tag = "Guessed class name";
                            break;

                        case "Namespace": item.Tag = "Guessed namespace";
                            break;

                        case "Base page": item.Tag = "Custom base page";
                            break;
                        }
                    }
                    #region DataGrid menu

                    dataGridNodesTable.CellMouseClick -= new DataGridViewCellMouseEventHandler(dataGridNodesTable_CellContentClick);
                    dataGridNodesTable.CellMouseClick += new DataGridViewCellMouseEventHandler(dataGridNodesTable_CellContentClick);
                    dataGridNodesTable.Columns["Details"].HeaderCell.ContextMenuStrip
                        = contextMenuStripDataGridView;
                    dataGridNodesTable.EnableHeadersVisualStyles = false;
                    dataGridNodesTable.Columns["Details"].HeaderCell.Style.ForeColor = Color.Blue;

                    #endregion
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
Exemplo n.º 3
0
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.InitialDirectory = "c:\\";
            ofd.Filter           = "project files (*.csproj)|*.csproj|All files (*.*)|*.*";
            ofd.FilterIndex      = 1;
            ofd.RestoreDirectory = true;

            if (ofd.ShowDialog() == true)
            {
                try
                {
                    #region CheckBox list creator

                    ProgectSettings = new ProjectSettings();

                    XmlDocument doc = new XmlDocument();
                    docName = ofd.FileName.ToString();
                    doc.Load(docName);
                    XmlDocument docExport      = new XmlDocument();
                    string      exportFilePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(docName), "ExportSetting.xml");
                    ProgectSettings.ExportFileName = exportFilePath;

                    XmlNode root = doc.DocumentElement;

                    XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
                    nsmgr.AddNamespace("ns", root.NamespaceURI);

                    Assembly assembly = typeof(IPageInstance).Module.Assembly;
                    ProgectSettings.IsRefJCMSAdded = AssemblyRefCreator.IsAssemblyRefAdded(assembly, docName);
                    ProgectSettings.AddBasePageToCollection("test");
                    ProgectSettings.AddBasePageToCollection("test2");


                    XmlNode nameSpace = root.SelectSingleNode("//ns:RootNamespace", nsmgr);
                    jazNamespace = nameSpace.InnerText;
                    ProgectSettings.RootNameSpace = jazNamespace;

                    XmlNodeList    nodeList       = root.SelectNodes("//ns:Compile", nsmgr);
                    List <XmlNode> nodeCollection = new List <XmlNode>();
                    foreach (XmlNode node in nodeList)
                    {
                        if (node.Attributes.GetNamedItem("Include").Value.Contains(OldFileExtension))
                        {
                            nodeCollection.Add(node);
                        }
                    }

                    List <DataRowComponents> dataRowCollection = new List <DataRowComponents>();

                    foreach (XmlNode selectedNodes in nodeCollection)
                    {
                        DataRowComponents dataRow = new DataRowComponents();
                        dataRow.IsSelected = false;

                        string location = selectedNodes.Attributes.GetNamedItem("Include").Value;

                        dataRow.Text = location;
                        string      xPath        = "//ns:Compile[@Include='" + location.Replace(OldFileExtension, NewFileExtension) + "']";
                        XmlNodeList jazNodesList = root.SelectNodes(xPath, nsmgr);
                        jazClassName = System.IO.Path.GetFileName(location).Replace(OldFileExtension, "");
                        string directory        = System.IO.Path.GetDirectoryName(location).Replace("\\", ".");
                        string jazNamespaceNode = jazNamespace;
                        if (!string.IsNullOrEmpty(directory))
                        {
                            jazNamespaceNode = jazNamespace + "." + directory;
                        }

                        dataRow.Namespace = jazNamespaceNode;
                        dataRow.ClassName = jazClassName;

                        string           exFilePath    = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(docName), "ExportSetting.xml");
                        PageSettings     pageSet       = new PageSettings(exFilePath, location);
                        XmlStoreProvider storeProvider = new XmlStoreProvider(exFilePath);
                        ProgectSettings.SelectedPage = pageSet;
                        storeProvider.LoadSettings(ProgectSettings);

                        if (ProgectSettings.IsSetted)
                        {
                            dataRow.Namespace = ProgectSettings.SelectedPage.NameSpace;
                            dataRow.ClassName = ProgectSettings.SelectedPage.ClassName;
                        }

                        if (jazNodesList.Count > 0)
                        {
                            dataRow.IsSelected = true;
                        }

                        dataRow.Tag      = selectedNodes;
                        dataRow.BasePage = "test2";
                        dataRowCollection.Add(dataRow);
                    }

                    DataSet   dataSet           = new DataSet("JazCmsDataSet");
                    DataTable dataTable         = new DataTable("DataRowComponentsCollection");
                    DataTable basePageListTable = new DataTable("BasePageListTable");
                    basePageListTable.Columns.Add("BasePage", typeof(string));

                    foreach (string page in ProgectSettings.BasePageCollection)
                    {
                        basePageListTable.Rows.Add(page);
                    }

                    List <string> hiddenColumns = new List <string>();

                    foreach (PropertyInfo property in typeof(DataRowComponents).GetProperties())
                    {
                        Type type = property.PropertyType;
                        DisplayNameAttribute[] propertyArrey = (DisplayNameAttribute[])
                                                               (property.GetCustomAttributes(typeof(DisplayNameAttribute), true));

                        HidePropertyAttribute[] hidePropertyArrey = (HidePropertyAttribute[])
                                                                    (property.GetCustomAttributes(typeof(HidePropertyAttribute), true));

                        DataColumn col;
                        if (propertyArrey.Count() != 0)
                        {
                            col = new DataColumn(propertyArrey.First().DisplayName, type);
                        }
                        else
                        {
                            col = new DataColumn(property.Name, type);
                        }

                        dataTable.Columns.Add(col);

                        if (hidePropertyArrey.Count() != 0 && hidePropertyArrey.First().IsHidden)
                        {
                            hiddenColumns.Add(col.ColumnName);
                        }
                    }

                    DataColumn dataSource = new DataColumn("DataSource", typeof(DataRowComponents));
                    dataTable.Columns.Add(dataSource);

                    foreach (DataRowComponents row in dataRowCollection)
                    {
                        dataTable.Rows.Add(row.IsSelected, row.Text, row.ClassName, row.Namespace, row.BasePage, row.Tag, row);
                    }

                    dataSet.Tables.Add(dataTable);
                    dataSet.Tables.Add(basePageListTable);

                    DataColumn child  = dataSet.Tables["DataRowComponentsCollection"].Columns["Custom base page"];
                    DataColumn parent = dataSet.Tables["BasePageListTable"].Columns["BasePage"];
                    parent.Unique = true;
                    ForeignKeyConstraint fk = new ForeignKeyConstraint("FK_BasePage", parent, child);
                    dataSet.Tables["DataRowComponentsCollection"].Constraints.Add(fk);
                    dataSet.Relations.Add("BasePage",
                                          parent,
                                          child);

                    DataRelationCollection            relationCollection = dataSet.Relations;
                    SortedList <string, DataRelation> relCollection      = new SortedList <string, DataRelation>();

                    foreach (DataRelation rel in relationCollection)
                    {
                        if (rel.ChildTable.TableName == "DataRowComponentsCollection")
                        {
                            relCollection.Add(rel.ChildColumns.First().ColumnName, rel);
                        }
                    }

                    GridView gridview = new GridView();
                    listview.DataContext = dataTable;
                    Binding bind = new Binding();
                    listview.ItemsSource = dataTable as IEnumerable;

                    foreach (DataColumn col in dataTable.Columns)
                    {
                        GridViewColumn gvcolumn = new GridViewColumn();
                        gvcolumn.Header = col.ColumnName;
                        if (hiddenColumns.Contains(col.ColumnName))
                        {
                            gvcolumn.Width = 0;
                        }

                        if (relCollection.Keys.Contains(col.ColumnName))
                        {
                            DataColumn parentColumn = relCollection.Where(p => p.Key == col.ColumnName)
                                                      .Select(p => p.Value).First().ParentColumns.First();

                            DataTemplate dtCombo = new DataTemplate();
                            dtCombo.DataType = typeof(String);
                            FrameworkElementFactory fefCombo = new FrameworkElementFactory(typeof(ComboBox));
                            Binding bdCombo = new Binding(col.ColumnName);

                            List <string> basePagesList = new List <string>();

                            foreach (DataRow comboRow in parentColumn.Table.Rows)
                            {
                                basePagesList.Add(comboRow.ItemArray.First().ToString());
                            }

                            ComboBox templateComboBox = new ComboBox();
                            templateComboBox.FontSize = 12;
                            fefCombo.SetValue(ComboBox.ItemsSourceProperty, basePagesList);
                            fefCombo.SetValue(ComboBox.BackgroundProperty, TransparentBrush);
                            fefCombo.SetValue(ComboBox.ForegroundProperty, new SolidColorBrush(Colors.Goldenrod));
                            fefCombo.SetValue(ComboBox.BorderBrushProperty, TransparentBrush);
                            fefCombo.SetValue(ComboBox.FontSizeProperty, templateComboBox.FontSize);
                            fefCombo.SetBinding(ComboBox.SelectedItemProperty, bdCombo);
                            dtCombo.VisualTree    = fefCombo;
                            gvcolumn.CellTemplate = dtCombo;
                            gridview.Columns.Add(gvcolumn);
                        }
                        else
                        if (col.DataType == typeof(bool))
                        {
                            DataTemplate dtCheckbox = new DataTemplate();
                            dtCheckbox.DataType = typeof(Boolean);
                            FrameworkElementFactory fefCheckbox = new FrameworkElementFactory(typeof(CheckBox));
                            Binding bdCheckbox = new Binding(col.ColumnName);
                            fefCheckbox.SetBinding(CheckBox.IsCheckedProperty, bdCheckbox);
                            dtCheckbox.VisualTree = fefCheckbox;
                            gvcolumn.CellTemplate = dtCheckbox;
                            gridview.Columns.Add(gvcolumn);
                        }
                        else
                        if (col.DataType == typeof(string))
                        {
                            DataTemplate dtTextBox = new DataTemplate();
                            dtTextBox.DataType = typeof(string);
                            FrameworkElementFactory fefTextBox = new FrameworkElementFactory(typeof(TextBox));
                            Binding bdTextBox           = new Binding(col.ColumnName);
                            Binding bdIsTextBoxReadOnly = new Binding("Existing jaz files");
                            fefTextBox.SetBinding(TextBox.TextProperty, bdTextBox);
                            TextBox templateTB = new TextBox();
                            templateTB.FontSize = 12;

                            if (col.ColumnName == "Path to file")
                            {
                                fefTextBox.SetValue(TextBox.IsReadOnlyProperty, true);
                            }
                            else
                            {
                                fefTextBox.SetBinding(TextBox.IsReadOnlyProperty, bdIsTextBoxReadOnly);
                            }

                            fefTextBox.SetValue(TextBox.BackgroundProperty, TransparentBrush);
                            fefTextBox.SetValue(TextBox.ForegroundProperty, new SolidColorBrush(Colors.Goldenrod));
                            fefTextBox.SetValue(TextBox.FontSizeProperty, templateTB.FontSize);
                            fefTextBox.SetValue(TextBox.BorderBrushProperty, TransparentBrush);
                            dtTextBox.VisualTree  = fefTextBox;
                            gvcolumn.CellTemplate = dtTextBox;
                            gridview.Columns.Add(gvcolumn);
                        }
                        else
                        {
                            gvcolumn.Width = 0;
                            gridview.Columns.Add(gvcolumn);
                        }
                    }

                    GridViewColumn buttonDetailColumn = new GridViewColumn();

                    DataTemplate dtButtonDetail = new DataTemplate();
                    dtButtonDetail.DataType = typeof(String);

                    Button templateButton = new Button();
                    templateButton.Width = 50;

                    FrameworkElementFactory fefForButton = new FrameworkElementFactory(typeof(Button));
                    fefForButton.SetValue(Button.ContentProperty, "...");
                    fefForButton.SetValue(Button.WidthProperty, templateButton.Width);
                    Binding bdButton = new Binding(dataTable.Columns["DataSource"].ColumnName);
                    fefForButton.SetBinding(Button.TagProperty, bdButton);
                    fefForButton.AddHandler(Button.ClickEvent, new RoutedEventHandler(innerButtonInListView_Click));

                    Binding bindButtonDetail = new Binding();
                    fefForButton.SetBinding(TextBox.NameProperty, bindButtonDetail);
                    dtButtonDetail.VisualTree = fefForButton;

                    buttonDetailColumn.CellTemplate = dtButtonDetail;

                    #region DataGrid menu

                    ContextMenu contextMenuVisibleColumns = new ContextMenu();
                    MenuItem    existingJazFiles          = new MenuItem()
                    {
                        Header = "Existing Jaz files", IsEnabled = false
                    };
                    MenuItem path = new MenuItem()
                    {
                        Header = "Path to page", IsEnabled = false
                    };
                    MenuItem classNameMenuItem = new MenuItem()
                    {
                        Header = "Class name"
                    };
                    MenuItem namespaceMenuItem = new MenuItem()
                    {
                        Header = "Namespace"
                    };
                    MenuItem basePageMenuItem = new MenuItem()
                    {
                        Header = "Base page"
                    };
                    contextMenuVisibleColumns.Items.Add(existingJazFiles);
                    contextMenuVisibleColumns.Items.Add(path);
                    contextMenuVisibleColumns.Items.Add(classNameMenuItem);
                    contextMenuVisibleColumns.Items.Add(namespaceMenuItem);
                    contextMenuVisibleColumns.Items.Add(basePageMenuItem);
                    foreach (MenuItem contextItem in contextMenuVisibleColumns.Items)
                    {
                        contextItem.IsCheckable = true;
                        contextItem.IsChecked   = true;

                        contextItem.Checked +=
                            new RoutedEventHandler(contextMenuStripDataGridView_CheckedChanged);
                        contextItem.Unchecked +=
                            new RoutedEventHandler(contextMenuStripDataGridView_CheckedChanged);
                        switch (contextItem.Header.ToString())
                        {
                        case "Class name": contextItem.Tag = "Guessed class name";
                            break;

                        case "Namespace": contextItem.Tag = "Guessed namespace";
                            break;

                        case "Base page": contextItem.Tag = "Custom base page";
                            break;
                        }
                    }

                    #endregion

                    FrameworkElementFactory fefHeaderMenuButton = new FrameworkElementFactory(typeof(Button));
                    fefHeaderMenuButton.SetValue(Button.ContentProperty, "Details");
                    fefHeaderMenuButton.SetValue(Button.ContextMenuProperty, contextMenuVisibleColumns);
                    fefHeaderMenuButton.SetValue(Button.BackgroundProperty, TransparentBrush);
                    fefHeaderMenuButton.SetValue(Button.BorderBrushProperty, TransparentBrush);
                    DataTemplate dtHeaderMenuButton = new DataTemplate();
                    dtHeaderMenuButton.VisualTree     = fefHeaderMenuButton;
                    buttonDetailColumn.HeaderTemplate = dtHeaderMenuButton;

                    gridview.Columns.Add(buttonDetailColumn);
                    listview.View = gridview;
                    listview.SetBinding(ListView.ItemsSourceProperty, bind);
                    listview.Focus();

                    #endregion

                    //Content = listview;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }