private void ExpandTableNode(DevExpress.XtraTreeList.Nodes.TreeListNode node)
        {
            ABCCommonTreeListNode obj = (ABCCommonTreeListNode)this.GetDataRecordByNode(node);

            if (obj == null || (FieldNodeInfo)obj.InnerData == null)
            {
                return;
            }

            FieldNodeInfo data = (FieldNodeInfo)obj.InnerData;

            if (data.Type == FiledNodeType.Table || data.Type == FiledNodeType.List)
            {
                node.Expanded = true;
            }
            if (data.Type == FiledNodeType.Field)
            {
                node.Expanded = false;
            }

            foreach (DevExpress.XtraTreeList.Nodes.TreeListNode childNode in node.Nodes)
            {
                ExpandTableNode(childNode);
            }
        }
        public void ExpandForeignNode(ABCCommonTreeListNode node)
        {
            FieldNodeInfo fieldInfo = (FieldNodeInfo)node.InnerData;

            if (fieldInfo == null)
            {
                return;
            }
            String[] strArr = fieldInfo.FieldName.Split(':');
            if (strArr.Length <= 0)
            {
                return;
            }

            String strFK = strArr[strArr.Length - 1];

            String strTableName = DataStructureProvider.GetTableNameOfForeignKey(fieldInfo.TableName, strFK);

            if (DataStructureProvider.DataTablesList.ContainsKey(strTableName) == false)
            {
                return;
            }

            foreach (String strFieldName in DataStructureProvider.DataTablesList[strTableName].ColumnsList.Keys)
            {
                InitField(node, strTableName, strFieldName);
            }
        }
        private void InitField(ABCCommonTreeListNode parentNode, String strTableName, String strFieldName)
        {
            ABCScreen.ABCBindingConfig bindInfo = ((FieldNodeInfo)parentNode.InnerData).Config;
            String strDiplay = DataConfigProvider.GetFieldCaption(strTableName, strFieldName);

            if (strDiplay == strFieldName)
            {
                return;
            }

            FieldNodeInfo fieldInfo = new FieldNodeInfo();

            fieldInfo.Display = strDiplay;
            fieldInfo.Type    = FiledNodeType.Field;
            fieldInfo.Config  = bindInfo;
            if (String.IsNullOrWhiteSpace(((FieldNodeInfo)parentNode.InnerData).FieldName) == false)
            {
                fieldInfo.FieldName = ((FieldNodeInfo)parentNode.InnerData).FieldName + ":";
            }

            fieldInfo.FieldName += strFieldName;
            fieldInfo.TableName  = strTableName;

            ABCCommonTreeListNode node = new ABCCommonTreeListNode(parentNode, fieldInfo);

            InitControls(node);

            if (DataStructureProvider.IsForeignKey(strTableName, strFieldName))
            {
                fieldInfo.Type = FiledNodeType.Foreign;
            }
        }
        private void InitControls(ABCCommonTreeListNode node)
        {
            FieldNodeInfo fieldNodeInfo = (FieldNodeInfo)node.InnerData;
            List <Type>   lstType       = ABCControls.ABCPresentHelper.GetControlTypes(fieldNodeInfo.Config.TableName, fieldNodeInfo.FieldName);

            foreach (Type type in lstType)
            {
                String strName = type.Name.Split(new String[] { "ABC" }, StringSplitOptions.None)[1];
                InitControl(node, type, strName);
            }
        }
        void Tree_DragOver(object sender, DragEventArgs e)
        {
            if (e.Data is DataObject)
            {
                DataObject data = (DataObject)e.Data;

                DevExpress.XtraTreeList.Nodes.TreeListNode treeNode = (DevExpress.XtraTreeList.Nodes.TreeListNode)data.GetData(typeof(DevExpress.XtraTreeList.Nodes.TreeListNode));
                if (treeNode != null)
                {
                    ABCCommonTreeListNode obj = (ABCCommonTreeListNode)this.GetDataRecordByNode(treeNode);
                    if (obj == null || (FieldNodeInfo)obj.InnerData == null)
                    {
                        return;
                    }

                    FieldNodeInfo fieldNode = (FieldNodeInfo)obj.InnerData;
                    if ((fieldNode.Type == FiledNodeType.Field || fieldNode.Type == FiledNodeType.Foreign) && obj.ChildrenNodes.Count > 0)
                    {
                        foreach (ABCCommonTreeListNode childNode in obj.ChildrenNodes)
                        {
                            if ((FieldNodeInfo)childNode.InnerData == null)
                            {
                                continue;
                            }

                            if (((FieldNodeInfo)childNode.InnerData).ToolboxItem != null)
                            {
                                fieldNode = (FieldNodeInfo)childNode.InnerData;
                                break;
                            }
                        }
                    }
                    if (fieldNode.ToolboxItem != null)
                    {
                        OwnerStudio.Toolbox.SelectedToolboxItem = fieldNode.ToolboxItem;
                        data = OwnerStudio.Toolbox.SerializeToolboxItem(fieldNode.ToolboxItem) as DataObject;
                        try
                        {
                            OwnerStudio.Toolbox.DoDragDrop(data, DragDropEffects.Copy);
                            OwnerStudio.Toolbox.SelectedToolboxItem = null;
                            return;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }

                        OwnerStudio.Toolbox.SelectedToolboxItem = null;
                    }
                }
            }

            // e.Effect=DragDropEffects.None;
        }
        private void InitControl(ABCCommonTreeListNode node, Type ControlType, String strDisplay)
        {
            ABCScreen.ABCBindingConfig bindInfo = ((FieldNodeInfo)node.InnerData).Config;

            FieldNodeInfo fieldInfo = new FieldNodeInfo();

            fieldInfo.Type    = FiledNodeType.Control;
            fieldInfo.Display = strDisplay;
            //fieldInfo.Config=bindInfo;
            //fieldInfo.FieldName=( (FieldNodeInfo)node.InnerData ).FieldName;
            //fieldInfo.TableName=( (FieldNodeInfo)node.InnerData ).TableName;

            if (ControlType == typeof(ABCCheckEdit) || ControlType == typeof(ABCCheckPanel) || ControlType == typeof(ABCRadioGroup) || ControlType == typeof(ABCLabel))
            {
                fieldInfo.ToolboxItem                   = new ABCToolboxItem(ControlType);
                fieldInfo.ToolboxItem.Binding           = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.FieldName = ((FieldNodeInfo)node.InnerData).FieldName;
                fieldInfo.ToolboxItem.Binding.TableName = ((FieldNodeInfo)node.InnerData).Config.TableName;
                fieldInfo.ToolboxItem.Binding.BusName   = bindInfo.Name;
            }
            else if (ControlType == typeof(ABCSearchPanel) || ControlType == typeof(ABCAutoSearchPanel))
            {
                fieldInfo.ToolboxItem                   = new ABCToolboxItem(ControlType);
                fieldInfo.ToolboxItem.Binding           = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.TableName = ((FieldNodeInfo)node.InnerData).Config.TableName;
                fieldInfo.ToolboxItem.Binding.BusName   = bindInfo.Name;
            }
            else if (ControlType == typeof(ABCDataPanel))
            {
                fieldInfo.ToolboxItem                   = new ABCToolboxItem(ControlType);
                fieldInfo.ToolboxItem.Binding           = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.TableName = ((FieldNodeInfo)node.InnerData).Config.TableName;
                fieldInfo.ToolboxItem.Binding.BusName   = bindInfo.Name;
            }
            else
            {
                if (ControlType == typeof(ABCSearchControl))
                {
                    fieldInfo.ToolboxItem = new ABCToolboxItem(typeof(ABCSearchControl));
                }
                else
                {
                    fieldInfo.ToolboxItem = new ABCToolboxItem(typeof(ABCBindingBaseEdit));
                }
                fieldInfo.ToolboxItem.Binding             = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.FieldName   = ((FieldNodeInfo)node.InnerData).FieldName;
                fieldInfo.ToolboxItem.Binding.TableName   = ((FieldNodeInfo)node.InnerData).Config.TableName;
                fieldInfo.ToolboxItem.Binding.BusName     = bindInfo.Name;
                fieldInfo.ToolboxItem.Binding.ControlType = ControlType;
            }
            new ABCCommonTreeListNode(node, fieldInfo);
        }
        void Tree_BeforeDragNode(object sender, DevExpress.XtraTreeList.BeforeDragNodeEventArgs e)
        {
            ABCCommonTreeListNode obj = (ABCCommonTreeListNode)this.GetDataRecordByNode(e.Node);

            if (obj == null || (FieldNodeInfo)obj.InnerData == null)
            {
                return;
            }

            FieldNodeInfo data = (FieldNodeInfo)obj.InnerData;

            if (data.Type == FiledNodeType.Table)
            {
                e.CanDrag = false;
                return;
            }
        }
        void Menu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (e.Item.Tag != null && e.Item.Tag.ToString() == "Explore" && this.Selection.Count > 0)
            {
                ABCCommonTreeListNode obj = (ABCCommonTreeListNode)this.GetDataRecordByNode(this.FocusedNode);
                if (obj == null || (FieldNodeInfo)obj.InnerData == null)
                {
                    return;
                }

                FieldNodeInfo data = (FieldNodeInfo)obj.InnerData;
                if (data.Type == FiledNodeType.Foreign)
                {
                    ExpandForeignNode(obj);
                    this.RefreshDataSource();
                    ExpandTableNode(this.FocusedNode);
                }
            }
        }
        void Tree_CustomDrawNodeCell(object sender, DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs e)
        {
            ABCCommonTreeListNode obj = (ABCCommonTreeListNode)this.GetDataRecordByNode(e.Node);

            if (obj == null || (FieldNodeInfo)obj.InnerData == null)
            {
                return;
            }

            FieldNodeInfo data = (FieldNodeInfo)obj.InnerData;

            if (data.Type == FiledNodeType.Table || data.Type == FiledNodeType.List)
            {
                e.Appearance.Font = new Font(e.Appearance.Font, FontStyle.Bold);
            }

            if (e.Node.Selected)
            {
                e.Appearance.Font = new Font(e.Appearance.Font, e.Appearance.Font.Style | FontStyle.Underline);
            }
        }
        void FieldBindingTree_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right && ModifierKeys == Keys.None && this.State == TreeListState.Regular)
            {
                Point           pt   = this.PointToClient(MousePosition);
                TreeListHitInfo info = this.CalcHitInfo(pt);
                if (info.HitInfoType == HitInfoType.Cell || info.HitInfoType == HitInfoType.StateImage)
                {
                    this.FocusedNode = info.Node;

                    ABCCommonTreeListNode obj = (ABCCommonTreeListNode)this.GetDataRecordByNode(this.FocusedNode);
                    if (obj == null || (FieldNodeInfo)obj.InnerData == null)
                    {
                        return;
                    }

                    FieldNodeInfo data = (FieldNodeInfo)obj.InnerData;
                    if (data.Type == FiledNodeType.Foreign)
                    {
                        ContextMenu.ShowPopup(MousePosition);
                    }
                }
            }
        }
        private void InitTable(ABCCommonTreeListNode parentNode, ABCScreen.ABCBindingConfig bindInfo)
        {
            if (DataStructureProvider.DataTablesList.ContainsKey(bindInfo.TableName) == false)
            {
                return;
            }

            ABCCommonTreeListNode node      = null;
            FieldNodeInfo         fieldInfo = new FieldNodeInfo();

            fieldInfo.Display = DataConfigProvider.GetTableCaption(bindInfo.TableName) + String.Format(@" ( {0} ) ", bindInfo.Name);
            fieldInfo.Type    = FiledNodeType.List;
            fieldInfo.Config  = bindInfo;
            node = new ABCCommonTreeListNode(parentNode, fieldInfo);

            InitControl(node, typeof(ABCSearchPanel), "SearchPanel");
            InitControl(node, typeof(ABCAutoSearchPanel), "AutoSearchPanel");
            InitControl(node, typeof(ABCDataPanel), "DataPanel");
            if (bindInfo.IsList)
            {
                fieldInfo.Type = FiledNodeType.List;

                #region IsList

                #region Grid
                fieldInfo                               = new FieldNodeInfo();
                fieldInfo.Type                          = FiledNodeType.Control;
                fieldInfo.Display                       = "GridControl";
                fieldInfo.ToolboxItem                   = new ABCToolboxItem(typeof(ABCGridControl));
                fieldInfo.ToolboxItem.Binding           = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.BusName   = bindInfo.Name;
                fieldInfo.ToolboxItem.Binding.TableName = bindInfo.TableName;
                ABCCommonTreeListNode listNode = new ABCCommonTreeListNode(node, fieldInfo);
                #endregion

                #region BandedGrid
                fieldInfo                               = new FieldNodeInfo();
                fieldInfo.Type                          = FiledNodeType.Control;
                fieldInfo.Display                       = "BandedGridControl";
                fieldInfo.ToolboxItem                   = new ABCToolboxItem(typeof(ABCGridBandedControl));
                fieldInfo.ToolboxItem.Binding           = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.BusName   = bindInfo.Name;
                fieldInfo.ToolboxItem.Binding.TableName = bindInfo.TableName;
                listNode = new ABCCommonTreeListNode(node, fieldInfo);
                #endregion

                #region BandedGrid
                fieldInfo                               = new FieldNodeInfo();
                fieldInfo.Type                          = FiledNodeType.Control;
                fieldInfo.Display                       = "PivotGridControl";
                fieldInfo.ToolboxItem                   = new ABCToolboxItem(typeof(ABCPivotGridControl));
                fieldInfo.ToolboxItem.Binding           = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.BusName   = bindInfo.Name;
                fieldInfo.ToolboxItem.Binding.TableName = bindInfo.TableName;
                listNode = new ABCCommonTreeListNode(node, fieldInfo);
                #endregion

                #region BandedGrid
                fieldInfo                               = new FieldNodeInfo();
                fieldInfo.Type                          = FiledNodeType.Control;
                fieldInfo.Display                       = "TreeList";
                fieldInfo.ToolboxItem                   = new ABCToolboxItem(typeof(ABCTreeList));
                fieldInfo.ToolboxItem.Binding           = new ABCControls.ABCBindingInfo();
                fieldInfo.ToolboxItem.Binding.BusName   = bindInfo.Name;
                fieldInfo.ToolboxItem.Binding.TableName = bindInfo.TableName;
                listNode = new ABCCommonTreeListNode(node, fieldInfo);
                #endregion
                #endregion
            }
            else
            {
                fieldInfo.Type = FiledNodeType.Table;
            }

            foreach (String strFieldName in DataStructureProvider.DataTablesList[bindInfo.TableName].ColumnsList.Keys)
            {
                InitField(node, bindInfo.TableName, strFieldName);
            }


            foreach (ABCScreen.ABCBindingConfig childInfo in bindInfo.Children.Values)
            {
                InitTable(node, childInfo);
            }
        }
        void Tree_GetStateImage(object sender, GetStateImageEventArgs e)
        {
            ABCCommonTreeListNode obj = (ABCCommonTreeListNode)this.GetDataRecordByNode(e.Node);

            if (obj == null || (FieldNodeInfo)obj.InnerData == null)
            {
                return;
            }

            FieldNodeInfo data = (FieldNodeInfo)obj.InnerData;

            if (data.Type == FiledNodeType.Table)
            {
                e.NodeImageIndex = 106;
            }
            else if (data.Type == FiledNodeType.Field)
            {
                e.NodeImageIndex = 107;
            }
            else if (data.Type == FiledNodeType.Foreign)
            {
                e.NodeImageIndex = 109;
            }
            else if (data.Type == FiledNodeType.List)
            {
                e.NodeImageIndex = 106;
            }
            else if (data.Type == FiledNodeType.Control)
            {
                if (data.Display == "GridControl" || data.Display == "BandedGridControl" || data.Display == "PivotGridControl")
                {
                    e.NodeImageIndex = 95;
                }
                if (data.Display == "TextEdit")
                {
                    e.NodeImageIndex = 85;
                }
                if (data.Display == "GridLookUpEdit")
                {
                    e.NodeImageIndex = 100;
                }
                if (data.Display == "LookUpEdit")
                {
                    e.NodeImageIndex = 100;
                }
                if (data.Display == "MemoEdit")
                {
                    e.NodeImageIndex = 101;
                }
                if (data.Display == "MemoExEdit")
                {
                    e.NodeImageIndex = 102;
                }
                if (data.Display == "CalcEdit")
                {
                    e.NodeImageIndex = 87;
                }
                if (data.Display == "SpinEdit")
                {
                    e.NodeImageIndex = 87;
                }
                if (data.Display == "CheckEdit")
                {
                    e.NodeImageIndex = 88;
                }
                if (data.Display == "CheckedListBox")
                {
                    e.NodeImageIndex = 89;
                }
                if (data.Display == "DateEdit")
                {
                    e.NodeImageIndex = 92;
                }
                if (data.Display == "TimeEdit")
                {
                    e.NodeImageIndex = 92;
                }
                if (data.Display == "Label")
                {
                    e.NodeImageIndex = 99;
                }
                if (data.Display == "RadioGroup")
                {
                    e.NodeImageIndex = 104;
                }
                if (data.Display == "RichEditControl")
                {
                    e.NodeImageIndex = 105;
                }
                if (data.Display == "SearchControl")
                {
                    e.NodeImageIndex = 112;
                }
                if (data.Display == "SearchPanel")
                {
                    e.NodeImageIndex = 112;
                }
                if (data.Display == "DataPanel")
                {
                    e.NodeImageIndex = 113;
                }
            }
        }