/// <summary> /// 解析指定的字典名称、位运算值创建并输出其位运算后的,支持通过位运算的复选但不需要明细项(如其它备注信息)的情况。 /// </summary> /// <param name="data">要解析的目标数据字典对象</param> /// <param name="bitwiseValue">位运算后的值</param> /// <returns>字典数据对象</returns> public void ResolveMultieSelectDictionaryDataWithBitwise(DictionaryData data, out long bitwiseValue) { if (data == null) { throw new ArgumentNullException("data"); } bitwiseValue = data.BitwiseValue; }
/// <summary> /// 解析指定的字典名称、数据项集合、值字段名称、备注字段、选中字段名称创建并返回字典数据对象,支持非位运算的复选且备注信息(如果需要的话)在不选中的状态下仍然能够持久化的情况。 /// </summary> /// <param name="data">要解析的目标数据字典对象</param> /// <param name="modelType">字典数据明细项对应的实体模型的类型</param> /// <param name="valueFieldName">值字段名称</param> /// <param name="descriptionFieldName">备注字段名称</param> /// <param name="selectedFieldName">选中字段名称</param> /// <returns>字典数据对象</returns> public List<object> ResolveMultieSelectDictionaryData(DictionaryData data, Type modelType, string valueFieldName, string descriptionFieldName, string selectedFieldName) { if (data == null) { throw new ArgumentNullException("data"); } if (modelType == null) { throw new ArgumentNullException("modelType"); } this.EnsureStrArgNotNullOrWhiteSpace("valueFieldName", valueFieldName); this.EnsureStrArgNotNullOrWhiteSpace("selectedFieldName", selectedFieldName); DictionaryDataItem dictionaryDataItem; List<object> list = new List<object>(); for (int i = 0; i < data.All.Count; i++) { dictionaryDataItem = data.All[i]; if (dictionaryDataItem.Selected || (dictionaryDataItem.DictionaryItem.RequireDescription && !String.IsNullOrWhiteSpace(dictionaryDataItem.Description)))// 某数据项处于选中状态或数据项的 Description 不为空,就将其持久化 { object modelInstance = Activator.CreateInstance(modelType); if (dictionaryDataItem.ExtendProperties.Count > 0) { foreach (KeyValuePair<string, object> kvp in dictionaryDataItem.ExtendProperties) { MemberInfo member = this.GetPropertyOrFieldMember(kvp.Key, modelType); if (member != null) { this.SetPropertyOrFieldMemberValue(member, modelInstance, kvp.Value); } } } if (dictionaryDataItem.DictionaryItem.RequireDescription) { if (String.IsNullOrWhiteSpace(descriptionFieldName)) { throw new ArgumentException("因为字典\"{0}\"中值为\"{1}\"的字典项需要备注信息,所以备注字段的名称不能为空。", "descriptionFieldName"); } this.SetPropertyOrFieldMemberValue(descriptionFieldName, modelType, modelInstance, dictionaryDataItem.Description); } this.SetPropertyOrFieldMemberValue(valueFieldName, modelType, modelInstance, data.Dictionary.ConvertInt64ToItemValueDataType( dictionaryDataItem.DictionaryItem.Value) ); this.SetPropertyOrFieldMemberValue(selectedFieldName, modelType, modelInstance, dictionaryDataItem.Selected); list.Add(modelInstance); } } return list; }
/// <summary> /// 解析指定的数据字典对象并输出其选定的值,支持字典单选的情况。 /// </summary> /// <param name="data">要解析的目标数据字典对象</param> /// <param name="selectedValue">选定值</param> /// <returns>字典数据对象</returns> public void ResolveSingleSelectDictionaryData(DictionaryData data, out long selectedValue) { if (data == null) { throw new ArgumentNullException("data"); } selectedValue = -1; for (int i = 0; i < data.All.Count; i++) { if (data.All[i].Selected) { selectedValue = data.All[i].DictionaryItem.Value; break; } } }
/// <summary> /// 解析指定的字典名称、数据项集合、值字段名称、备注字段、选中字段名称创建并返回字典数据对象,支持非位运算的复选且备注信息(如果需要的话)在不选中的状态下仍然能够持久化的情况。 /// </summary> /// <param name="cityId">字典关联的城市Id,系统根据此参数值为特定城市返回适用于该城市的字典。</param> /// <param name="dictionaryName">字典名称</param> /// <param name="dataItems">数据项集合</param> /// <param name="valueFieldName">值字段名称</param> /// <param name="descriptionFieldName">备注字段名称</param> /// <param name="selectedFieldName">选中字段名称</param> /// <returns>字典数据对象</returns> public DictionaryData CreateMultieSelectDictionaryData(int cityId, string dictionaryName, List<object> dataItems, string valueFieldName, string descriptionFieldName, string selectedFieldName) { Dictionary dictionary = this.EnsureDictionary(dictionaryName, cityId); if (dataItems != null) { this.EnsureStrArgNotNullOrWhiteSpace("valueFieldName", valueFieldName); } DictionaryData data = new DictionaryData(dictionary); DictionaryDataItem dictionaryDataItem; if (dataItems != null && dataItems.Count > 0) { Type modelType = dataItems[0].GetType(); for (int i = 0; i < dataItems.Count; i++) { Int64 value = Convert.ToInt64(this.GetPropertyOrFieldMemberValue(valueFieldName, modelType, dataItems[i])); dictionaryDataItem = data.All.GetItemByValue(value); if (dictionaryDataItem != null) { // 备注信息的绑定 if (dictionaryDataItem.DictionaryItem.RequireDescription) { if (String.IsNullOrWhiteSpace(descriptionFieldName)) { throw new ArgumentException("因为字典\"{0}\"中值为\"{1}\"的字典项需要备注信息,所以备注字段的名称不能为空。", "descriptionFieldName"); } } this.InitDictionaryDataItem(dictionaryDataItem, modelType, dataItems[i], valueFieldName, descriptionFieldName, selectedFieldName); // 未指定选中字段的情况下,dataitems 中的所有项都视为选中状态 if (String.IsNullOrWhiteSpace(selectedFieldName)) { dictionaryDataItem.Selected = true; } } } } return data; }
/// <summary> /// 解析指定的字典名称、位运算值、数据项集合、值字段名称、备注字段名称创建并返回字典数据对象,支持字典通过位运算的复选且需要明细项(如其它备注信息)的情况。 /// </summary> /// <param name="cityId">字典关联的城市Id,系统根据此参数值为特定城市返回适用于该城市的字典。</param> /// <param name="dictionaryName">字典名称</param> /// <param name="bitwiseValue">位运算值</param> /// <param name="dataItems">数据项集合</param> /// <param name="valueFieldName">值字段名称</param> /// <param name="descriptionFieldName">备注字段名称</param> /// <returns>字典数据对象</returns> public DictionaryData CreateMultieSelectDictionaryDataWithBitwise(int cityId, string dictionaryName, long bitwiseValue, List<object> dataItems, string valueFieldName, string descriptionFieldName) { Dictionary dictionary = this.EnsureDictionary(dictionaryName, cityId); if (!dictionary.RaiseBitwise) { throw new ApplicationException(String.Format("名称为\"{0}\"的字典不支持位运算", dictionaryName)); } if (dataItems != null && String.IsNullOrWhiteSpace(valueFieldName)) { throw new ArgumentException("valueFieldName"); } DictionaryData data = new DictionaryData(dictionary); DictionaryDataItem dictionaryDataItem; // 绑定值 if (bitwiseValue > 0) { for (int i = 0; i < data.All.Count; i++) { dictionaryDataItem = data.All[i]; if (dictionaryDataItem.Children.Count > 0)//如果存在子级字典项,则本级字典项不参与位运算 { } else { if ((dictionaryDataItem.DictionaryItem.Value & bitwiseValue) == dictionaryDataItem.DictionaryItem.Value) { dictionaryDataItem.Selected = true; } } } } // 绑定备注信息 if (dataItems != null && dataItems.Count > 0) { Type modelType = dataItems[0].GetType(); for (int i = 0; i < dataItems.Count; i++) { Int64 value = Convert.ToInt64(this.GetPropertyOrFieldMemberValue(valueFieldName, modelType, dataItems[i])); dictionaryDataItem = data.All.GetItemByValue(value); if (dictionaryDataItem != null) { // 备注信息的绑定 if (dictionaryDataItem.DictionaryItem.RequireDescription) { if (String.IsNullOrWhiteSpace(descriptionFieldName)) { throw new ArgumentException("因为字典\"{0}\"中值为\"{1}\"的字典项需要备注信息,所以备注字段的名称不能为空。", "descriptionFieldName"); } } this.InitDictionaryDataItem(dictionaryDataItem, modelType, dataItems[i], valueFieldName, descriptionFieldName, null); } } } return data; }
/// <summary> /// 解析指定的字典名称、选定值创建并返回字典数据对象,支持字典单选的情况。 /// </summary> /// <param name="cityId">字典关联的城市Id,系统根据此参数值为特定城市返回适用于该城市的字典。</param> /// <param name="dictionaryName">字典名称</param> /// <param name="selectedValue">选定值</param> /// <returns>字典数据对象</returns> public DictionaryData CreateSingleSelectDictionaryData(int cityId, string dictionaryName, long selectedValue) { Dictionary dictionary = this.EnsureDictionary(dictionaryName, cityId); DictionaryData data = new DictionaryData(dictionary); DictionaryDataItem dictionaryDataItem; for (int i = 0; i < data.All.Count; i++) { dictionaryDataItem = data.All[i]; if (dictionaryDataItem.DictionaryItem.Value == selectedValue) { dictionaryDataItem.Selected = true; break; } } return data; }
internal void SetRelation(DictionaryData owner, DictionaryDataItem parent, DictionaryDataItemCollection children) { this.owner = owner; this.parent = parent; this.children = children; }