📄 webformhandler.cs
字号:
/// 表单验证器,现仅支持一个验证器,委托链长度不得多于一个。
/// </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 + -