/// <summary> /// 控件创建对象 /// </summary> /// <param name="sourceData">数据源</param> /// <param name="items">绑定定义</param> /// <returns>不做校验的数据</returns> private DataBindingItemCollection MappingControlsToData(object sourceData, DataBindingItemCollection items) { DataBindingItemCollection unValidates = new DataBindingItemCollection(); foreach (DataBindingItem item in items) { if (!item.IsValidate) unValidates.Add(item); if ((item.Direction & BindingDirection.ControlToData) != BindingDirection.None) { //对象路径 string targetPro = string.Empty; object subData; //对象属性 string targetProName = item.DataPropertyName; SplitPath(sourceData, item.DataPropertyName, out targetPro, out targetProName); if (item.SubBindings.Count > 0) { subData = FindObjectByPath(sourceData, item.DataPropertyName); MappingControlsToData(subData, item.SubBindings); } else { subData = FindObjectByPath(sourceData, targetPro); MappingOneControlToOneData(subData, targetProName, item); } } } return unValidates; }
/// <summary> /// 将数据绑定至控件 /// </summary> /// <param name="sourceData">数据源</param> /// <param name="items">数据项</param> private void MappingDataToControls(object sourceData, DataBindingItemCollection items) { if (sourceData != null) { foreach (DataBindingItem item in items) { if ((item.Direction & BindingDirection.DataToControl) != BindingDirection.None) { //对象路径 string targetPro = string.Empty; object subData; //对象属性 string targetProName = item.DataPropertyName; SplitPath(sourceData, item.DataPropertyName, out targetPro, out targetProName); //获取路径上的对象 if (item.SubBindings.Count > 0) { subData = FindObjectByPath(sourceData, item.DataPropertyName); if (subData != null) { MappingDataToControls(subData, item.SubBindings); } } else { subData = FindObjectByPath(sourceData, targetPro); if (subData != null) { MappingOneDataToOneControl(TypePropertiesCacheQueue.Instance.GetPropertyInfo(subData.GetType(), GetObjectPropertyName(subData.GetType(), targetProName)), subData, targetProName, item); } } } } } }
/// <summary> /// 服务端校验对象数据 /// </summary> /// <param name="objdata">数据对象</param> /// <param name="unValidates"></param> /// <param name="msg">错误回传消息</param> /// <returns>是否验证成功</returns> private bool ValidateData(object objdata, DataBindingItemCollection unValidates, out string msg) { bool isval = false; msg = string.Empty; StringBuilder validMsgs = new StringBuilder(); List<string> unValidatePropName = new List<string>(); foreach (DataBindingItem bItem in unValidates) { unValidatePropName.Add(bItem.DataPropertyName); } if (ValidateUnbindProperties == false) { PropertyInfo[] pInfos = objdata.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (PropertyInfo pi in pInfos) { if (this.ItemBindings.Exists(item => item.DataPropertyName == pi.Name) == false) unValidatePropName.Add(pi.Name); } } Validator validator = ValidationFactory.CreateValidator(objdata.GetType(), unValidatePropName); ValidationResults valResults = validator.Validate(objdata); isval = valResults.IsValid(); foreach (ValidationResult vItem in valResults) { msg = vItem.Tag == null ? vItem.Key : vItem.Tag; if (msg != null && msg.Length > 0) { msg += ":"; } validMsgs.Append(msg + vItem.Message + "\r\n"); if (vItem.NestedValidationResults != null) { foreach (ValidationResult vSubItem in vItem.NestedValidationResults) { msg = vSubItem.Tag == null ? vSubItem.Key : vSubItem.Tag; if (msg != null && msg.Length > 0) msg += ":"; validMsgs.Append(msg + vSubItem.Message + "\r\n"); } } } isval = DoExValidate(validMsgs, isval); msg = validMsgs.ToString(); return isval; }