/// <summary>
        /// 编辑界面的数据绑定分3步来完成
        /// 1,先绑定ComboBox 的数据源
        /// 2,绑定点击选择数据的数据源
        /// 3,控件编辑绑定
        /// </summary>
        /// <param name="colPropertys"></param>
        /// <param name="columnEditInfoList"></param>
        /// <param name="dataSource"></param>
        /// <param name="dataBindingProvider"></param>
        /// <param name="bindingOptions"></param>
        /// <returns></returns>
        public List <ColumnBindingInfo> CreateDataBinding(Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys,
                                                          Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> columnEditInfoList,
                                                          BindingSourceEx dataSource,
                                                          MB.WinBase.Binding.IDataBindingProvider dataBindingProvider,
                                                          DataBindingOptions bindingOptions)
        {
            //在数据绑定之前先清空文本框的数据
            ClearBindingEditCtl(dataBindingProvider);

            List <ColumnBindingInfo> bindingDatas = new List <ColumnBindingInfo>();
            Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colsCfg = colPropertys;

            string[] fieldPropertys = getDataPropertysNames(dataSource);
            if (fieldPropertys == null || fieldPropertys.Length == 0)
            {
                throw new Exceptions.DataBindingException();
            }


            ctlDataBingByDataBinding(colPropertys, fieldPropertys, dataSource, dataBindingProvider, bindingOptions, bindingDatas, columnEditInfoList);

            //设置绑定Lable 的 描述展示信息
            ResetLableCaption(dataBindingProvider, colsCfg);

            return(bindingDatas);
        }
        /// <summary>
        /// 重新设置绑定的Lable 描述。
        /// </summary>
        /// <param name="dataBindingProvider"></param>
        public void ResetLableCaption(MB.WinBase.Binding.IDataBindingProvider dataBindingProvider, Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys)
        {
            if (dataBindingProvider == null || dataBindingProvider.DataBindings == null)
            {
                return;
            }
            foreach (Control ctl in dataBindingProvider.DataBindings.Keys)
            {
                string ctlName = ctl.GetType().Name;
                if (Array.IndexOf <string>(_DESCRIPTION_CONTROLS, ctlName) < 0)
                {
                    continue;
                }
                string propertyName = dataBindingProvider.DataBindings[ctl].ColumnName;
                if (!colPropertys.ContainsKey(propertyName))
                {
                    continue;
                }
                var colInfo = colPropertys[propertyName];
                System.Drawing.Color canEditColor = colInfo.CanEdit ? System.Drawing.Color.Blue : System.Drawing.Color.Black;

                ctl.ForeColor = colInfo.IsNull ? canEditColor : System.Drawing.Color.Red;
                if (colInfo.IsKey)
                {
                    ctl.Font = new System.Drawing.Font(ctl.Font, System.Drawing.FontStyle.Bold);
                }
            }
        }
        /// <summary>
        /// 编辑界面的数据绑定分3步来完成
        /// 1,先绑定ComboBox 的数据源
        /// 2,绑定点击选择数据的数据源
        /// 3,控件编辑绑定
        /// </summary>
        /// <param name="dataSource"></param>
        /// <param name="xmlFileName"></param>
        /// <param name="dataBindingProvider"></param>
        /// <param name="bindingOptions"></param>
        /// <returns></returns>
        public List <ColumnBindingInfo> CreateDataBinding(BindingSourceEx dataSource, string xmlFileName,
                                                          MB.WinBase.Binding.IDataBindingProvider dataBindingProvider,
                                                          DataBindingOptions bindingOptions)
        {
            Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys       = MB.WinBase.LayoutXmlConfigHelper.Instance.GetColumnPropertys(xmlFileName);
            Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo>  columnEditInfoList = MB.WinBase.LayoutXmlConfigHelper.Instance.GetColumnEdits(colPropertys, xmlFileName);

            return(CreateDataBinding(colPropertys, columnEditInfoList, dataSource, dataBindingProvider, bindingOptions));
        }
 /// <summary>
 /// 清除输入框的值。
 /// </summary>
 /// <param name="dataBindingProvider"></param>
 public void ClearBindingEditCtl(MB.WinBase.Binding.IDataBindingProvider dataBindingProvider)
 {
     if (dataBindingProvider == null || dataBindingProvider.DataBindings == null)
     {
         return;
     }
     foreach (Control ctl in dataBindingProvider.DataBindings.Keys)
     {
         string ctlName = ctl.GetType().Name;
         if (Array.IndexOf <string>(MyDataBindingProvider.INCLUDE_TAG_TEXT_CTLS, ctlName) >= 0)
         {
             ctl.Text = string.Empty;
         }
     }
 }
        /// <summary>
        /// 编辑界面的数据绑定分3步来完成
        /// 1,先绑定ComboBox 的数据源
        /// 2,绑定点击选择数据的数据源
        /// 3,控件编辑绑定
        /// </summary>
        /// <param name="clientBaseRule"></param>
        /// <param name="dataSource"></param>
        /// <param name="ctls"></param>
        /// <returns></returns>
        public List <ColumnBindingInfo> CreateDataBinding(IFace.IClientRule clientBaseRule, BindingSourceEx dataSource,
                                                          MB.WinBase.Binding.IDataBindingProvider dataBindingProvider, DataBindingOptions bindingOptions)
        {
            ////在数据绑定之前先清空文本框的数据
            //ClearBindingEditCtl(dataBindingProvider);

            //List<ColumnBindingInfo> bindingDatas = new List<ColumnBindingInfo>();
            //Dictionary<string, MB.WinBase.Common.ColumnPropertyInfo> colsCfg = clientBaseRule.UIRuleXmlConfigInfo.GetDefaultColumns();
            //string[] propertys = getDataPropertysNames(dataSource);
            //if (propertys == null || propertys.Length == 0)
            //    throw new Exceptions.DataBindingException();


            //ctlDataBingByDataBinding(colsCfg, propertys, dataSource, dataBindingProvider, bindingOptions, bindingDatas, clientBaseRule.UIRuleXmlConfigInfo.ColumnsCfgEdit);

            ////设置绑定Lable 的 描述展示信息
            //ResetLableCaption(dataBindingProvider, colsCfg);

            //return bindingDatas;
            return(CreateDataBinding(clientBaseRule.UIRuleXmlConfigInfo.GetDefaultColumns(), clientBaseRule.UIRuleXmlConfigInfo.ColumnsCfgEdit, dataSource, dataBindingProvider, bindingOptions));
        }
        //绑定ButtonClick

        #region 内部函数处理...


        //控件编辑绑定。
        private void ctlDataBingByDataBinding(Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> editCfgColumns, string[] dataPropertys,
                                              System.Windows.Forms.BindingSource bindingSource,
                                              MB.WinBase.Binding.IDataBindingProvider dataBindingProvider,
                                              DataBindingOptions bindingOptions,
                                              List <ColumnBindingInfo> bindingDatas,
                                              Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> columnEditInfoList)
        {
            if (dataBindingProvider == null || dataBindingProvider.DataBindings == null || dataBindingProvider.DataBindings.Count == 0)
            {
                return;
            }

            Dictionary <Control, DesignColumnXmlCfgInfo> bindingCtls = dataBindingProvider.DataBindings;

            foreach (Control ctl in bindingCtls.Keys)
            {
                string ctlTypeName = ctl.GetType().Name;
                if (_DESCRIPTION_CONTROLS.Contains <string>(ctlTypeName))
                {
                    continue;
                }

                string ctlBindingName   = getCtlBindingPropertyName(ctl);
                string dataPropertyName = bindingCtls[ctl].ColumnName;
                if (Array.IndexOf <string>(dataPropertys, dataPropertyName) < 0)
                {
                    continue;
                }

                MB.WinBase.Common.ColumnPropertyInfo colCfg = null;
                if (editCfgColumns.ContainsKey(dataPropertyName))
                {
                    colCfg = editCfgColumns[dataPropertyName];
                }

                if (editCfgColumns != null && editCfgColumns.ContainsKey(dataPropertyName))
                {
                    //特殊处理,绑定到特殊的控件。
                    ColumnBindingInfo ctlBinding = new ColumnBindingInfo(dataPropertyName, colCfg, ctl);
                    if (!colCfg.CanEdit)
                    {
                        setEditControlReadonly(ctl, true);
                    }

                    //如果是string 类型 并且设置MacLength 同时绑订的是TextBox 控件,那么就限制它的输入长度
                    if (string.Compare(colCfg.DataType, "System.String", true) == 0)
                    {
                        TextBox txtBox = ctl as TextBox;
                        if (txtBox != null && colCfg.MaxLength > 0)
                        {
                            txtBox.MaxLength = colCfg.MaxLength;
                        }
                    }
                    bindingDatas.Add(ctlBinding);
                }


                System.Windows.Forms.Binding binding = new System.Windows.Forms.Binding(ctlBindingName, bindingSource,
                                                                                        dataPropertyName, true, DataSourceUpdateMode.OnPropertyChanged); //DataSourceUpdateMode.OnValidation

                if (colCfg != null)
                {
                    formateBindControl(ctl, binding, colCfg);
                }
                //编辑界面的数据绑定分3步来完成

                //1,先绑定ComboBox 的数据源
                if (columnEditInfoList != null && columnEditInfoList.Count > 0)
                {
                    FillComboxLookUp(ctl, dataPropertyName, editCfgColumns, columnEditInfoList, false);
                }

                //2,绑定点击选择数据的数据源
                if (columnEditInfoList != null && columnEditInfoList.ContainsKey(dataPropertyName))
                {
                    bindingToSpecialEditCtl(ctl, columnEditInfoList[dataPropertyName]);
                }

                //3,控件编辑绑定
                ctl.DataBindings.Add(binding);
            }
        }