⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webformhandler.cs

📁 x2webcontrols
💻 CS
📖 第 1 页 / 共 2 页
字号:
		/// 表单验证器,现仅支持一个验证器,委托链长度不得多于一个。
		/// </summary>
		public delegate bool Validator();
		/// <summary>
		/// 存储委托对象。
		/// </summary>
		public Validator validator=null;

		/// <summary>
		/// 使用委托验证器验证传递过来的数据是否合法
		/// </summary>
		/// <returns>提交的数据是否符合用户定义的逻辑。</returns>
		private bool DataValid()
		{
			bool validOk=true;
			if(validator!=null)
			{
				validOk=validator();
			}
			return validOk;
		}

		/// <summary>
		/// 添加数据完成事件,当数据被添加到数据库之后触发。
		/// </summary>
		public event X2Design.Data.DbOperEventHandler AddOk;
		/// <summary>
		///添加数据完成事件,当数据被添加到数据库之后触发。
		/// </summary>
		/// <param name="e">添加完成的事件参数。</param>
		protected virtual void OnAddOk(X2Design.Data.DbOperEventArgs e)
		{
			if(AddOk!=null)
			{
				AddOk(this,e);
			}
		}

		/// <summary>
		/// 修改数据完成事件,当数据被更新到数据库之后触发。
		/// </summary>
		public event System.EventHandler ModifyOk;
		/// <summary>
		/// 修改完成事件,当数据被更新到数据库之后触发。
		/// </summary>
		/// <param name="e">修改完成的事件参数。</param>
		protected virtual void OnModifyOk(System.EventArgs e)
		{
			if(ModifyOk!=null)
			{
				ModifyOk(this,e);
			}
		}

		/// <summary>
		/// 当修改时,数据库中的字段值会被填充到相应绑定的控件中,此事件在填充完成后,显示到页面之前触发。
		/// </summary>
		public event System.EventHandler BindBeforeModifyOk;
		/// <summary>
		/// 当修改时,数据库中的字段值会被填充到相应绑定的控件中,此事件在填充完成后,显示到页面之前触发。
		/// </summary>
		/// <param name="e">事件参数。</param>
		protected virtual void OnBindBeforeModifyOk(System.EventArgs e)
		{
			if(BindBeforeModifyOk!=null)
			{
				BindBeforeModifyOk(this,e);
			}
		}

		/// <summary>
		/// 在页面预生成时,提交到浏览器之前,检查是否需要将数据库中的数据填充到表单中。
		/// </summary>
		/// <param name="sender">传递的对象。</param>
		/// <param name="e">传递的事件参数。</param>
		private void Page_PreRender(object sender, EventArgs e)
		{
			if(this.Mode==OperationType.Modify && !btnSubmit.Page.IsPostBack)
			{
				BindWhenModify();
			}
		}
	}
	/// <summary>
	/// 定义的委托原型。
	/// </summary>
	public delegate string Action(string s);

	
	#region 自定义用来支持表单处理的类
	/// <summary>
	/// 每个和数据库字段绑定的对象以BinderItem为容器存储在数组中。
	/// </summary>
	public class BinderItem
	{
		/// <summary>
		/// 每个绑定控件都是以object的形式被存储的。
		/// </summary>
		public object o;
		/// <summary>
		/// 绑定到数据库的字段名称。
		/// </summary>
		public string field;
		/// <summary>
		/// 是否是字符串类型。
		/// </summary>
		public bool isStringType;
		/// <summary>
		/// 构造函数。
		/// </summary>
		/// <param name="_o">需要绑定的控件对象。</param>
		/// <param name="_field">绑定到的数据表字段名称。</param>
		/// <param name="_isStringType">是否是字符串类型。</param>
		public BinderItem(object _o,string _field,bool _isStringType)
		{
			this.o=_o;
			this.field=_field;
			this.isStringType=_isStringType;
		}

		/// <summary>
		/// 构造函数。
		/// </summary>
		/// <param name="_o">需要绑定的string变量引用。</param>
		/// <param name="_field">绑定到的数据表字段名称。</param>
		/// <param name="_isStringType">是否是字符串类型。</param>
		public BinderItem(ref string _o,string _field,bool _isStringType)
		{
			this.o=_o;
			this.field=_field;
			this.isStringType=_isStringType;
		}
		/// <summary>
		/// 根据控件类型获得控件的值。
		/// </summary>
		/// <returns>控件的值。</returns>
		public string GetValue()
		{
			//属性类型
			if(o is MyProperty)
			{
				MyProperty mp=(MyProperty)o;
				System.Type type=mp.po.GetType();
				System.Reflection.PropertyInfo pi=type.GetProperty(mp.propertyName);
				return (string)pi.GetValue(mp.po,null);
				//return type.InvokeMember(mp.propertyName,System.Reflection.BindingFlags.GetProperty,null,mp.po,);
				//return mp.propertyName;
			}

			//字符串类型
			if(o is String)
			{
				string s=(string)o;
				return s;
				
			}
			//方法委托
			if(o is Action)
			{
				Action action=(Action)o;
				return action("_g_e_t_");
			}
			//下拉框
			if(o is DropDownList)
			{
				DropDownList ddl=(DropDownList)o;
				return ddl.SelectedValue;
				
			}
			//复选框
			if(o is MyCheckBox)
			{
				MyCheckBox mcb=(MyCheckBox)o;
				if(mcb.cb.Checked)return mcb.Value;else return "0";
				
			}
			//单选按钮
			if(o is MyRadioButton)
			{
				MyRadioButton mrb=(MyRadioButton)o;
				if(mrb.rb.Checked)return mrb.Value;
			}
			//文本框
			if(o is TextBox)
			{
				TextBox tb=(TextBox)o;
				return tb.Text;
			}
			//Label
			if(o is Label)
			{
				Label lbl=(Label)o;
				return lbl.Text;
			}
			//Literal
			if(o is Literal)
			{
				Literal ltl=(Literal)o;
				return ltl.Text;
			}
			return string.Empty;
		}

		/// <summary>
		/// 根据控件类型设定控件的值
		/// </summary>
		/// <param name="_value">要设定的值。</param>
		public void SetValue(string _value)
		{
			//属性类型
			if(o is MyProperty)
			{
				MyProperty mp=(MyProperty)o;
				System.Type type=mp.po.GetType();
				System.Reflection.PropertyInfo pi=type.GetProperty(mp.propertyName);
				pi.SetValue(mp.po,_value,null);
				//return type.InvokeMember(mp.propertyName,System.Reflection.BindingFlags.GetProperty,null,mp.po,);
				//return mp.propertyName;
			}

			//字符串类型
			if(o is String)
			{
				//this.SetString((string)o,_value);
				//return;
				string s=(string)o;
				s=_value;
				return;
			}
			//委托
			if(o is Action)
			{
				Action action=(Action)o;
				action(_value);
				return;
			}
			//下拉框
			if(o is DropDownList)
			{
				DropDownList ddl=(DropDownList)o;
				ListItem li=ddl.Items.FindByValue(_value);
				if(li!=null)
				{
					ddl.ClearSelection();
					li.Selected=true;
				}
				return;
			}
			//复选框
			if(o is MyCheckBox)
			{
				MyCheckBox mcb=(MyCheckBox)o;
				if(mcb.Value==_value)mcb.cb.Checked=true;
				return;
			}
			//单选按钮
			if(o is MyRadioButton)
			{
				MyRadioButton mrb=(MyRadioButton)o;
				if(mrb.Value==_value)mrb.rb.Checked=true;
				return;
			}
			//文本框
			if(o is TextBox)
			{
				TextBox tb=(TextBox)o;
				tb.Text=_value;
				return;
			}
			//Label
			if(o is Label)
			{
				Label lbl=(Label)o;
				lbl.Text=_value;
				return;
			}
			//Literal
			if(o is Literal)
			{
				Literal ltl=(Literal)o;
				ltl.Text=_value;
				return;
			}
		}

		private void SetString(string s,string _value)
		{
			s=_value;
		}

	}

	/// <summary>
	/// 扩展复选框,可以使CheckBox具有Value属性,选中时表现。
	/// </summary>
	public class MyCheckBox
	{
		/// <summary>
		/// CheckBox对象。
		/// </summary>
		public CheckBox cb;
		/// <summary>
		/// 选中时应该表现的值。
		/// </summary>
		public string Value;
		/// <summary>
		/// 构造函数。
		/// </summary>
		/// <param name="_cb">CheckBox对象。</param>
		/// <param name="_value">选中时应该表现的值。</param>
		public MyCheckBox(CheckBox _cb,string _value)
		{
			cb=_cb;
			Value=_value;
		}
	}

	/// <summary>
	/// 扩展单选按钮,可以使RadioButton具有Value属性,选中时表现。
	/// </summary>
	public class MyRadioButton
	{
		/// <summary>
		/// RadioButton对象。
		/// </summary>
		public RadioButton rb;
		/// <summary>
		/// 选中时应该表现的值。
		/// </summary>
		public string Value;
		/// <summary>
		/// 构造函数。
		/// </summary>
		/// <param name="_rb">RadioButton对象。</param>
		/// <param name="_value">选中时应该表现的值。</param>
		public MyRadioButton(RadioButton _rb,string _value)
		{
			rb=_rb;
			Value=_value;
		}
	}

	/// <summary>
	/// 扩展属性,存储一个对象引用和需要绑定的属性名称。
	/// </summary>
	public class MyProperty
	{
		/// <summary>
		/// 要绑定属性所在的对象。
		/// </summary>
		public object po;
		/// <summary>
		/// 要绑定的属性名称。
		/// </summary>
		public string propertyName;
		/// <summary>
		/// 构造函数。
		/// </summary>
		/// <param name="_o">要绑定属性所在的对象。</param>
		/// <param name="_propertyName">要绑定的属性名称。</param>
		public MyProperty(object _o,string _propertyName)
		{
			po=_o;
			propertyName=_propertyName;
		}
	}

	#endregion
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -