public virtual void Setup()
        {
            childControllers = new List <GnosisInnerLayoutController>();

            // ((IGnosisFrameImplementation)ControlImplementation).SetHorizontalAlignment(HorizontalAlignmentType.Left);
            // ((IGnosisFrameImplementation)ControlImplementation).SetController(this);

            if (((IGnosisFrameImplementation)ControlImplementation).MessageGrids != null && ((IGnosisFrameImplementation)ControlImplementation).MessageGrids[0] != null)
            {
                // IGnosisMessageGridImplementation msgGridImp = GlobalData.Singleton.ImplementationCreator.GetGnosisMessageGridImplementation();
                msgGridController = new GnosisMessageGridController(((IGnosisFrameImplementation)ControlImplementation).MessageGrids[0], InstanceController, this);
                childControllers.Add(msgGridController);
            }

            if (((IGnosisFrameImplementation)ControlImplementation).Grids != null)
            {
                foreach (GnosisGrid grid in ((IGnosisFrameImplementation)ControlImplementation).Grids)
                {
                    // IGnosisGridImplementation gridImplementation = GlobalData.Singleton.ImplementationCreator.GetGnosisGridImplementation();
                    GnosisGridController gridController = new GnosisGridController(grid, InstanceController, this);
                    gridController.Setup();

                    childControllers.Add(gridController);
                }
            }

            if (((IGnosisFrameImplementation)ControlImplementation).Panels != null)
            {
                foreach (GnosisPanel panel in ((IGnosisFrameImplementation)ControlImplementation).Panels)
                {
                    //  IGnosisPanelImplementation panelImplementation = GlobalData.Singleton.ImplementationCreator.GetGnosisPanelImplementation();
                    GnosisPanelController panelController = new GnosisPanelController(panel, InstanceController, this);
                    panelController.Setup();

                    childControllers.Add(panelController);
                }
            }

            if (((IGnosisFrameImplementation)ControlImplementation).Calendars != null)
            {
                foreach (GnosisCalendar calendar in ((IGnosisFrameImplementation)ControlImplementation).Calendars)
                {
                    // IGnosisCalendarImplementation calendarImp = GlobalData.Singleton.ImplementationCreator.GetGnosisCalendarImplementation();
                    GnosisCalendarController calendarController = new GnosisCalendarController(calendar, InstanceController, this);
                    //calendarController.Setup();

                    childControllers.Add(calendarController);
                }
            }

            if (((IGnosisFrameImplementation)ControlImplementation).TextAreas != null)
            {
                foreach (GnosisTextArea textArea in ((IGnosisFrameImplementation)ControlImplementation).TextAreas)
                {
                    //  IGnosisTextAreaImplementation textAreaImp = GlobalData.Singleton.ImplementationCreator.GetGnosisTextAreaImplementation();
                    GnosisTextAreaController textAreaController = new GnosisTextAreaController(textArea, InstanceController, this);
                }
            }
        }
        //public bool RowSelected
        //{
        //    get { return rowSelected; }
        //    set
        //    {
        //        rowSelected = value;
        //        foreach (GnosisGridFieldController field in Fields)
        //        {
        //            field.RowSelected = rowSelected;
        //        }
        //    }
        //}

        public GnosisGridRowController(GnosisGridController _parent, int _rowNum)
        {
            parent = _parent;
            rowNum = _rowNum;
            Fields = new List <IGnosisGridFieldImplementation>();

            if (rowNum % 2 != 0) //rowNum starts from 0
            {
                isEvenRow = true;
            }
        }
        //public GnosisGridFieldController FieldController
        //{
        //    get { return fieldController; }
        //}

        public GnosisGridColumnController(
            GnosisGridColumn column,
            GnosisInstanceController _instanceController,
            GnosisGridController _parent)
        {
            columnModel        = column;
            instanceController = _instanceController;
            parent             = _parent;
            fields             = new List <IGnosisGridFieldImplementation>();

            //header
            header = GnosisControlCreator.CreateGnosisGridHeaderField();
            GnosisStyle captionStyle = _instanceController.EntityController.GetCaptionStyle();

            GlobalData.Singleton.StyleHelper.ApplyCaptionStyle(header, captionStyle);
            double height = GlobalData.Singleton.StyleHelper.GetFieldHeight(header, captionStyle.Font, captionStyle.FontSize);

            ((GnosisGridHeaderField)header).Height = height;
            header.Caption = column.Caption;

            //columnar header
            columnarHeader = GnosisControlCreator.CreateGnosisCaptionLabel();
            GlobalData.Singleton.StyleHelper.ApplyCaptionStyle(columnarHeader, _instanceController.EntityController.GetCaptionStyle());

            SetDisplayWidths();

            ////field for cloning
            //if (column is GnosisTextColumn)
            //{
            //    // IGnosisGridTextFieldImplementation textFieldImp = GlobalData.Singleton.ImplementationCreator.GetGnosisGridTextFieldImplementation();
            //    ModelCreator.CreateGnosisGridTextField(1);
            //    fieldController = new GnosisGridTextFieldController(this, textFieldImp, instanceController, parent, 0);
            //    GlobalData.Singleton.StyleHelper.ApplyStyle(textFieldImp, fieldController, instanceController.EntityController.GetNormalStyle());
            //}
            //else if (column is GnosisTextResults)
            //{
            //    IGnosisTextResultsFieldImplementation textFieldImp = GlobalData.Singleton.ImplementationCreator.GetGnosisTextResultsFieldImplementation();
            //    fieldController = new GnosisTextResultsFieldController(this, textFieldImp, instanceController, (GnosisSearchResultsGridController)parent, 0);
            //    GlobalData.Singleton.StyleHelper.ApplyStyle(textFieldImp, fieldController, instanceController.EntityController.GetNormalStyle());
            //}
            //else if (column is GnosisCheckColumn)
            //{
            //    IGnosisGridCheckFieldImplementation checkFieldImp = GlobalData.Singleton.ImplementationCreator.GetGnosisGridCheckFieldImplementation();
            //    fieldController = new GnosisGridCheckFieldController(this, checkFieldImp, instanceController, parent, 0);
            //    GlobalData.Singleton.StyleHelper.ApplyStyle(checkFieldImp, fieldController, instanceController.EntityController.GetNormalStyle());
            //}
            //else if (column is GnosisCheckResults)
            //{
            //    IGnosisCheckResultsFieldImplementation checkFieldImp = GlobalData.Singleton.ImplementationCreator.GetGnosisCheckResultsFieldImplementation();
            //    fieldController = new GnosisCheckResultsFieldController(this, checkFieldImp, instanceController, (GnosisSearchResultsGridController)parent, 0);
            //}
            //else if (column is GnosisComboColumn)
            //{
            //    IGnosisGridComboFieldImplementation comboFieldImp = GlobalData.Singleton.ImplementationCreator.GetGnosisGridComboFieldImplementation();
            //    fieldController = new GnosisGridComboFieldController(this, comboFieldImp, instanceController, parent, 0);
            //}
            //else if (column is GnosisDateColumn)
            //{
            //    IGnosisGridDateFieldImplementation dateFieldImp = GlobalData.Singleton.ImplementationCreator.GetGnosisGridDateFieldImplementation();
            //    fieldController = new GnosisGridDateFieldController(this, dateFieldImp, instanceController, parent, 0);
            //}
            //else if (column is GnosisDateResults)
            //{
            //    IGnosisDateResultsFieldImplementation dateResultsImp = GlobalData.Singleton.ImplementationCreator.GetGnosisDateResultsFieldImplementation();
            //    fieldController = new GnosisDateResultsFieldController(this, dateResultsImp, instanceController, (GnosisSearchResultsGridController)parent, 0);
            //}
            //else if (column is GnosisDateTimeColumn)
            //{
            //    IGnosisGridDateTimeFieldImplementation dateTimeFieldImp = GlobalData.Singleton.ImplementationCreator.GetGnosisGridDateTimeFieldImplementation();
            //    fieldController = new GnosisGridDateTimeFieldController(this, dateTimeFieldImp, instanceController, parent, 0);
            //}
            //else if (column is GnosisDateTimeResults)
            //{
            //    IGnosisDateTimeResultsFieldImplementation dateTimeResultsImp = GlobalData.Singleton.ImplementationCreator.GetGnosisDateTimeResultsFieldImplementation();
            //    fieldController = new GnosisGridFieldController(this, dateTimeResultsImp, instanceController, (GnosisSearchResultsGridController)parent, 0);
            //}
            //fieldController.ControlImplementation.Order = column.Order;

            //get min and max field width
        }