/// <summary> /// 收集表单数据并给指定设置项设置值 /// </summary> /// <param name="setting"></param> /// <param name="property"></param> /// <returns></returns> protected virtual bool SetSettingItemValue(SettingBase setting, PropertyInfo property) { string value = _Request.Get(property.Name, Method.All, null, false); if (value == null) { ThrowError(new LostFormItemError(property.Name)); return(false); } else { setting.SetPropertyValue(property, value, false); if (HasUnCatchedError) { return(false); } } return(true); }
public override AllSettings LoadAllSettings() { AllSettings result = new AllSettings(); using (SqlQuery db = new SqlQuery()) { db.CommandType = CommandType.StoredProcedure; db.CommandText = "bx_LoadAllSettings"; db.CommandTimeout = 180; using (XSqlDataReader reader = db.ExecuteReader()) { string typeName = null; //while (dataReader != null && true) while (true) { #region 获取类型名 if (typeName == null) { if (reader.Read()) { typeName = reader.Get <string>("TypeName"); } else { break; } } #endregion #region 获取对应AllSettings类的属性名 string propertyName = null; if (typeName.StartsWith("MaxLabs.bbsMax.Settings.")) { propertyName = typeName.Substring(24); } else { if (reader.Read()) { typeName = reader.Get <string>("TypeName"); continue; } else { break; } } #endregion #region 获取对应属性名的属性 FieldInfo settingField = result.GetType().GetField(propertyName); if (settingField == null) { if (reader.Read()) { typeName = reader.Get <string>("TypeName"); continue; } else { break; } } #endregion SettingBase propertyValue = result.GetSettingFieldValue(settingField); if (propertyValue.Serializable) { propertyValue.Parse(reader.Get <string>("Value")); #region 读下一条记录 if (reader.Read()) { typeName = reader.Get <string>("TypeName"); } else { break; } #endregion } else { bool end = false; while (true) { #region 通过Key获取对应属性并赋值 string key = reader.Get <string>("Key"); PropertyInfo settingItemProperty = propertyValue.GetType().GetProperty(key); if (settingItemProperty != null) { propertyValue.SetPropertyValue(settingItemProperty, reader.Get <string>("Value"), true); } #endregion #region 读下一条记录 if (reader.Read()) { string nextTypeName = reader.Get <string>("TypeName"); if (typeName != nextTypeName) { typeName = nextTypeName; break; } } else { end = true; break; } #endregion } if (end) { break; } } } } } return(result); }