/// <summary>
 /// Atribui edição das colunas
 /// </summary>
 /// <param name="pView">GridView</param>
 /// <param name="pColumns">Nome das Colunas</param>
 /// <param name="pEditable">True se Editável False se não editável</param>
 public static void SetEditable(this DataGridTreeView pView, List <String> pColumns, bool pEditable)
 {
     foreach (var item in pColumns)
     {
         pView.Columns[item].OptionsColumn.AllowEdit = pEditable;
     }
 }
        /// <summary>
        /// Formata a coluna de acordo com o tipo especificado.
        /// </summary>
        /// <param name="pCollumn">A coluna do GridView.</param>
        /// <param name="pDataType">Tipo da coluna.</param>
        private static void CreateColumn(DataGridTreeView pTreeGridView, TableAdapterFieldCollection pTableColumns,
                                         params KeyValuePair <string, Dictionary <object, string> >[] pColumns)
        {
            foreach (TableAdapterField field in pTableColumns)
            {
                var columnList = (from p in pColumns
                                  where p.Key.Equals(field.Name)
                                  select new { Key = p.Key, Value = p.Value }).FirstOrDefault();

                var hasCustomColumn = (columnList != null);

                var column = pTreeGridView.Columns.AddField(field.Name);
                column.Caption      = field.Description;
                column.VisibleIndex = pTreeGridView.Columns.Count;

                if (hasCustomColumn)
                {
                    var comboEdit = new TreeGridValidValuesColumn(column);
                    foreach (var item in columnList.Value)
                    {
                        comboEdit.ValidValues.Add(item.Key, item.Value);
                    }
                }
                else
                {
                    FormatColumn(pTreeGridView.Columns[field.Name], field.GetDbType());
                }
            }
        }
 /// <summary>
 /// Atribiu a visibilidade das colunas
 /// </summary>
 /// <param name="pView">GridView</param>
 /// <param name="pColumns">Nome das Colunas</param>
 /// <param name="pVisible">True se visivel False se não visivel</param>
 public static void SetVisible(this DataGridTreeView pView, List <String> pColumns, bool pVisible)
 {
     foreach (var item in pColumns)
     {
         pView.Columns[item].Visible = pVisible;
     }
 }
        /// <summary>
        /// Formata as colunas do grid de acordo com o objeto passado como parâmetro.
        /// </summary>
        /// <typeparam name="T">Um objeto do tipo TableAdapter.</typeparam>
        /// <param name="pGridView">O controle GridView.</param>
        /// <param name="pDB">Objeto do banco de dados</param>
        /// <param name="pColumns">Uma lista de colunas.</param>
        public static void FormatGrid <T>(
            this DataGridTreeView pGridView,
            DataBaseAdapter pDB,
            params KeyValuePair <string, Dictionary <object, string> >[] pColumns) where T : TableAdapter
        {
            var pObject = pDB.CreateObject <T>();

            TreeGridViewExtention.CreateColumn(pGridView, pObject.Collumns, pColumns);
        }
        /// <summary>
        /// Formata as colunas do grid de acordo com o objeto passado como parâmetro.
        /// </summary>
        /// <typeparam name="T">Um objeto do tipo TableAdapter (B1).</typeparam>
        /// <param name="pGridView">O controle GridView.</param>
        /// <param name="pCompanyDb">O nome da empresa no SAP.</param>
        public static void FormatGrid <T>(this DataGridTreeView pGridView, string pCompanyDb,
                                          params KeyValuePair <string, Dictionary <object, string> >[] pColumns) where T : TableAdapter, new()
        {
            T pObject = new T()
            {
                DBName = pCompanyDb
            };

            TreeGridViewExtention.CreateColumn(pGridView, pObject.Collumns, pColumns);
        }
        /// <summary>
        /// Define cor padrão, baseado no look and feel das telas do SAP
        /// </summary>
        /// <param name="pView">View da Grid</param>
        public static void SetColors(this DataGridTreeView pView)
        {
            var color = Color.FromArgb(244, 231, 156);

            pView.Appearance.FocusedCell.BackColor = color;
            pView.Appearance.FocusedCell.ForeColor = Color.Black;

            pView.Appearance.FocusedRow.BackColor = color;
            pView.Appearance.FocusedRow.ForeColor = Color.Black;

            pView.Appearance.SelectedRow.BackColor = color;
            pView.Appearance.SelectedRow.ForeColor = Color.Black;

            pView.Appearance.HideSelectionRow.BackColor = color;
            pView.Appearance.HideSelectionRow.ForeColor = Color.Black;
        }
        /// <summary>
        /// Atribui as cores a aparencia da grid
        /// </summary>
        /// <param name="pView">View da grid</param>
        /// <param name="pDefaultColor">Color</param>
        /// <param name="pApplyRow">Aplica a linha</param>
        public static void SetColors(this DataGridTreeView pView, Color pDefaultColor, bool pApplyRow)
        {
            pView.Appearance.FocusedCell.BackColor = pDefaultColor;
            pView.Appearance.FocusedCell.ForeColor = pDefaultColor;

            if (pApplyRow)
            {
                pView.Appearance.FocusedRow.BackColor = pDefaultColor;
                pView.Appearance.FocusedRow.ForeColor = pDefaultColor;

                pView.Appearance.SelectedRow.BackColor = pDefaultColor;
                pView.Appearance.SelectedRow.ForeColor = pDefaultColor;

                pView.Appearance.HideSelectionRow.BackColor = pDefaultColor;
                pView.Appearance.HideSelectionRow.ForeColor = pDefaultColor;
            }
        }
        /// <summary>
        /// Adiciona coluna de CheckBox de seleção e define as cores de seleção padrão quando selecionado
        /// </summary>
        /// <param name="pView">View da Grid</param>
        /// <param name="pFieldName">Nome da coluna</param>
        /// <param name="pCaption">Título da coluna</param>
        public static void AddSelColumn(this DataGridTreeView pView, string pFieldName, string pCaption)
        {
            var col = pView.Columns.Add();

            col.FieldName   = pFieldName;
            col.Name        = pFieldName;
            col.Caption     = pCaption;
            col.UnboundType = DevExpress.XtraTreeList.Data.UnboundColumnType.Boolean;
            col.Visible     = true;

            var style = new StyleFormatCondition(
                DevExpress.XtraGrid.FormatConditionEnum.Equal, col, true, true, true, true);

            style.Appearance.BackColor = Color.FromArgb(240, 204, 77);
            style.Appearance.ForeColor = Color.Black;

            pView.FormatConditions.Add(style);
        }
 /// <summary>
 /// Formata as colunas do grid de acordo com a lista de colunas passdas com parametors
 /// </summary>
 /// <param name="pGridView">O controle GridView.</param>
 /// <param name="pTableColumns">Lista de Coluns da Tabela</param>
 /// <param name="pColumns">Lista de Coluns</param>
 public static void FormatGrid(this DataGridTreeView pGridView,
                               TableAdapterFieldCollection pTableColumns,
                               params KeyValuePair <string, Dictionary <object, string> >[] pColumns)
 {
     TreeGridViewExtention.CreateColumn(pGridView, pTableColumns, pColumns);
 }