/// <summary>
        /// InitDataControl
        /// </summary>
        /// <param name="control"></param>
        /// <param name="nvcName"></param>
        /// <param name="nvNameViewer"></param>
        /// <param name="nvNameEditor"></param>
        /// <param name="editorFilter"></param>
        public static void InitDataControl(INameValueMappingBindingControl control, string nvcName, string nvNameViewer, string nvNameEditor, string editorFilter)
        {
            if (control == null)
            {
                throw new ArgumentNullException("control");
            }

            if (string.IsNullOrEmpty(nvNameViewer))
            {
                // 如果是 FreeComboBox,则nvNameViewer为空(不需要Datasource进行显示)
                nvNameViewer = nvNameEditor;
            }

            NameValueMapping nvViewer = NameValueMappingCollection.Instance[nvNameViewer];

            control.ValueMember   = nvViewer.ValueMember;
            control.DisplayMember = nvViewer.DisplayMember;

            NameValueMapping nvEditor = NameValueMappingCollection.Instance[nvNameEditor];

            // 非动态,默认DataSet
            if (!nvEditor.IsDynamic)
            {
                nvcName = null;
            }
            control.SetDataBinding(nvcName, nvNameViewer, nvNameEditor, editorFilter);

            IGridDropdownControl gridControl = control as IGridDropdownControl;

            if (gridControl != null)
            {
                gridControl.VisibleColumns(nvViewer.MemberVisible);
                gridControl.AdjustDropDownControlSize();
            }
        }
        private static void ldc_MappingEdited(object sender, EventArgs e)
        {
            LabeledDataControl ldc             = sender as LabeledDataControl;
            INameValueMappingBindingControl bc = ldc.Control as INameValueMappingBindingControl;

            if (!string.IsNullOrEmpty(bc.NameValueMappingName) &&
                !bc.NameValueMappingName.StartsWith("EnumType"))
            {
                NameValueMappingInfo info = ADInfoBll.Instance.GetNameValueMappingInfo(bc.NameValueMappingName);
                if (info != null && info.EditAction != null)
                {
                    ServiceProvider.GetService <IApplication>().ExecuteAction(info.EditAction.Name);
                }
                else
                {
                    ServiceProvider.GetService <IMessageBox>().ShowWarning("无对应编辑窗口,请在配置信息中配置!");
                }
            }
        }
        internal static void DisposeDataControls(IDataControl[] dataControlsBuffer)
        {
            if (dataControlsBuffer != null)
            {
                foreach (IDataControl dc in dataControlsBuffer)
                {
                    LabeledDataControl ldc = dc as LabeledDataControl;
                    if (ldc != null)
                    {
                        INameValueMappingBindingControl bc = ldc.Control as INameValueMappingBindingControl;
                        if (bc != null && !string.IsNullOrEmpty(bc.NameValueMappingName) &&
                            !bc.NameValueMappingName.StartsWith("EnumType"))
                        {
                            ldc.MappingEdited -= new EventHandler(ldc_MappingEdited);
                            ldc.MappingReload -= new EventHandler(ldc_MappingReload);
                        }
                    }
                }

                dataControlsBuffer = null;
            }
        }
        /// <summary>
        /// InitDataControl
        /// </summary>
        /// <param name="control"></param>
        /// <param name="nvcName"></param>
        /// <param name="nvNameViewer"></param>
        /// <param name="nvNameEditor"></param>
        /// <param name="editorFilter"></param>
        public static void InitDataControl(INameValueMappingBindingControl control, string nvcName, string nvNameViewer, string nvNameEditor, string editorFilter)
        {
            if (control == null)
            {
                throw new ArgumentNullException("control");
            }

            if (string.IsNullOrEmpty(nvNameViewer))
            {
                // ����� FreeComboBox����nvNameViewerΪ�գ�����ҪDatasource������ʾ��
                nvNameViewer = nvNameEditor;
            }

            NameValueMapping nvViewer = NameValueMappingCollection.Instance[nvNameViewer];
            control.ValueMember = nvViewer.ValueMember;
            control.DisplayMember = nvViewer.DisplayMember;

            NameValueMapping nvEditor = NameValueMappingCollection.Instance[nvNameEditor];

            // �Ƕ�̬��Ĭ��DataSet
            if (!nvEditor.IsDynamic)
            {
                nvcName = null;
            }
            control.SetDataBinding(nvcName, nvNameViewer, nvNameEditor, editorFilter);

            IGridDropdownControl gridControl = control as IGridDropdownControl;
            if (gridControl != null)
            {
                gridControl.VisibleColumns(nvViewer.MemberVisible);
                gridControl.AdjustDropDownControlSize();
            }
        }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="nvNameViewer"></param>
 /// <param name="nvNameEditor"></param>
 /// <param name="editorFilter"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, string nvNameViewer, string nvNameEditor, string editorFilter)
 {
     InitDataControl(control, null, nvNameViewer, nvNameEditor, editorFilter);
 }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="nvName"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, string nvName)
 {
     InitDataControl(control, nvName, string.Empty);
 }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="type"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, Type type)
 {
     InitDataControl(control, type, false);
 }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="type"></param>
 /// <param name="notUseEnum"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, Type type, bool notUseEnum)
 {
     InitDataControl(control, type, notUseEnum, string.Empty);
 }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="type"></param>
 /// <param name="notUseEnum"></param>
 /// <param name="filter"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, Type type, bool notUseEnum, string filter)
 {
     string newName = NameValueMappingCollection.Instance.Add(type, notUseEnum);
     InitDataControl(control, null, newName, newName, filter);
 }
        internal static void InternalCreateDataControls(IDisplayManager dm, IControlManager cm, string gridName, IArchiveDetailFormAuto parent, ToolTip toolTip)
        {
            // 创建数据控件
            IList <GridColumnInfo> infos = ADInfoBll.Instance.GetGridColumnInfos(gridName);

            if (infos != null)
            {
                Dictionary <string, IDataControl> nowControls = new Dictionary <string, IDataControl>();
                GetSubControls(nowControls, parent as Control);

                List <Control> addControls = new List <Control>();
                if (infos.Count > 0)
                {
                    foreach (GridColumnInfo info in infos)
                    {
                        IDataControl dc;
                        if (!nowControls.ContainsKey(info.GridColumnName))
                        {
                            if (string.IsNullOrEmpty(info.DataControlType))
                            {
                                continue;
                            }

                            // SetDataControls in GetDataControl();
                            dc = Feng.Windows.Utils.ControlFactory.GetDataControl(info, dm.Name);
                            if (dc != null)
                            {
                                addControls.Add(dc as Control);
                            }
                        }
                        else
                        {
                            dc           = nowControls[info.GridColumnName];
                            dc.Available = true;

                            Feng.Windows.Utils.ControlFactory.SetDataControls(dc as Control, info, dm.Name);
                        }

                        // not process Editable and Insertable in here, should be in DataManger.SetState()
                        //dc.SetState(m_cm.State);

                        dm.DataControls.Add(dc);
                        dc.AvailableChanged -= new EventHandler(dc_AvailableChanged);
                        dc.AvailableChanged += new EventHandler(dc_AvailableChanged);

                        LabeledDataControl ldc = dc as LabeledDataControl;
                        if (ldc != null)
                        {
                            if (toolTip != null)
                            {
                                toolTip.SetToolTip(ldc.Label, string.IsNullOrEmpty(info.Help) ? info.Caption : info.Help);
                            }

                            INameValueMappingBindingControl bc = ldc.Control as INameValueMappingBindingControl;
                            if (bc != null && !string.IsNullOrEmpty(bc.NameValueMappingName) &&
                                !bc.NameValueMappingName.StartsWith("EnumType"))
                            {
                                ldc.MappingEdited -= new EventHandler(ldc_MappingEdited);
                                ldc.MappingReload -= new EventHandler(ldc_MappingReload);
                                ldc.MappingEdited += new EventHandler(ldc_MappingEdited);
                                ldc.MappingReload += new EventHandler(ldc_MappingReload);
                            }
                        }
                    }

                    parent.AddControls(addControls.ToArray());
                }
                else
                {
                    // 没有GridColumnInfo
                    foreach (IDataControl dc in nowControls.Values)
                    {
                        dc.AvailableChanged -= new EventHandler(dc_AvailableChanged);
                        dc.AvailableChanged += new EventHandler(dc_AvailableChanged);

                        //AddControl(dc as Control);
                        dc.Available = true;
                        dm.DataControls.Add(dc);
                    }
                }
            }
        }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="nvNameViewer"></param>
 /// <param name="nvNameEditor"></param>
 /// <param name="editorFilter"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, string nvNameViewer, string nvNameEditor, string editorFilter)
 {
     InitDataControl(control, null, nvNameViewer, nvNameEditor, editorFilter);
 }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="nvName"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, string nvName)
 {
     InitDataControl(control, nvName, string.Empty);
 }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="type"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, Type type)
 {
     InitDataControl(control, type, false);
 }
 /// <summary>
 /// InitDataControl
 /// </summary>
 /// <param name="control"></param>
 /// <param name="type"></param>
 /// <param name="notUseEnum"></param>
 public static void InitDataControl(INameValueMappingBindingControl control, Type type, bool notUseEnum)
 {
     InitDataControl(control, type, notUseEnum, string.Empty);
 }
        /// <summary>
        /// InitDataControl
        /// </summary>
        /// <param name="control"></param>
        /// <param name="type"></param>
        /// <param name="notUseEnum"></param>
        /// <param name="filter"></param>
        public static void InitDataControl(INameValueMappingBindingControl control, Type type, bool notUseEnum, string filter)
        {
            string newName = NameValueMappingCollection.Instance.Add(type, notUseEnum);

            InitDataControl(control, null, newName, newName, filter);
        }