使用接口来统一控件的取值、赋值和初始化
来源:互联网 发布:淘宝充值不到账 编辑:程序博客网 时间:2024/05/08 19:42
这里说的控件主要指的是文本框、下拉列表框这一类的控件,用户使用这些控件输入数据,然后我们需要提取这些数据进行处理。但是不同的控件有不同的取值方式,比如文本框要用Text,下拉列表框是SelectedValue (当然还有其他的方法),CheckBoxList也是SelectedValue,但是这个只能获取第一个选项,如果是选择了多个选项,他只能返回第一个被选中的选项。可能您觉得这个没什么的呀,很正常呀。
是呀,只不过我比较懒,尤其在写表单控件的时候,如何取值就是一个大问题了。以前用很笨的方法,用case一个一个的判断,代码写起来很长也不便于扩展。后来学习了接口,发现可以定一个接口来“统一”这些控件的取值问题,而且还可以扩展。
【接口定义】
{
// 属性
/// <summary>
/// 统一的取值和赋值的属性
/// </summary>
/// <returns>控件的某个值</returns>
string ControlValue{ get; set;}
// Properties
/// <summary>
/// 返回控件的类型 "201":文本框
/// </summary>
string ControlKind { get; }
//函数
/// <summary>
/// 根据kind获取控件的某个属性的值
/// </summary>
/// <param name="kind">取值方式</param>
/// <returns></returns>
string GetControlValue(string kind);
/// <summary>
/// 根据kind设置控件的默认值
/// </summary>
/// <param name="kind">赋值方式</param>
/// <param name="value">值</param>
void SetControlValue(string kind, string value);
/// <summary>
/// 通过控件的描述信息,进行自我描述。比如设置maxlength 等。
/// </summary>
/// <param name="info">字段信息</param>
/// <param name="dal">数据访问函数库</param>
/// <param name="isForm">True:表单控件;False:查询控件</param>
void ShowMe(Nature.WebControls.BaseInfo.ColumnsInfoForm info, Nature.Data.DataAccessLibrary dal,bool isForm);
}
【CheckBoxList的实现代码】(其他的控件就省略了。)
public class MyCheckBoxList:CheckBoxList , IControlHelp
{
#region 实现接口
#region ControlValue
/// <summary>
/// 实现接口,SelectedValue
/// </summary>
[Bindable(true)]
[Category("文本值")]
[Description("通过SelectedValue设置选项;返回 SelectedValue 属性 ")]
public string ControlValue
{
get { return GetSelectedItemValue(); }
set { SetSelectedByValue(value); }
}
#endregion
#region GetControlValue
/// <summary>
/// 返回
/// </summary>
/// <param name="kind">取值的方式</param>
/// <returns></returns>
public string GetControlValue(string kind)
{
switch (kind)
{
default: //返回SelectedValue
return GetSelectedItemValue();
case "2": //返回SelectedItemText
return GetSelectedItemText();
}
}
#endregion
#region SetControlValue
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="kind"></param>
public void SetControlValue(string value, string kind)
{
switch (kind)
{
default: //
SetSelectedByValue(value);
break;
case "2": //
SetSelectedByText(value);
break;
}
}
#endregion
#region ControlKind
/// <summary>
/// 实现接口
/// </summary>
[Category("默认值"), Bindable(true), Description("获取控件类别")]
public string ControlKind
{
get { return "210"; }
}
#endregion
/// <summary>
/// 自我描述
/// </summary>
/// <param name="ColInfo">配置信息</param>
/// <param name="dal">数据访问函数库的实例</param>
/// <param name="isForm">True:表单控件;False:查询控件</param>
public virtual void ShowMe(BaseInfo.ColumnsInfoForm ColInfo, Nature.Data.DataAccessLibrary dal, bool isForm)
{
//base.Page.Response.Write(info + "<BR>");
//System.Web.HttpContext.Current.Response.Write(info.ControlInfo + "<BR>");
string[] infos = ColInfo.ControlInfo.Split('|');
if (infos.Length >= 3)
{
switch (infos[1])
{
case "cus": //自定义的形式
this.ItemAddByString(infos[2]);
break;
case "sql": //自定义的形式
this.BindListBySQL(infos[2], dal);
break;
case "lst": //列表自带的
break;
}
}
this.RepeatColumns = 3;
this.RepeatDirection = RepeatDirection.Horizontal;
}
#endregion
}
【使用代码】
foreach (WebControl ctrl in this.pnlAddUser.Controls)
{
ctrlHelp = (IControlHelp)ctrl;
Response.Write(ctrlHelp.ControlValue);
}
比如我们把控件都放在了一个Panel里面,那么我们就可以用遍历一下,把控件的值都取出来了。
这个对于表单控件还是很重要的,当然了也许对于您来说一点用处都没有。我这里也只是把我的想法写一下,也许能给一些人提醒一下呢。我觉得写程序,思路更重要。
其实常用的控件并不多,也就这么几个,如果不够的话,还可以随时扩展。 接口里的ShowMe是给分页控件用的,BaseInfo.ColumnsInfoForm 也是表单控件里的一个重要元素,是用来存放字段信息的。
- 使用接口来统一控件的取值、赋值和初始化
- 单选、双选控件的取值和赋值
- easyui 部分常用控件的取值和赋值
- dorado的autoform控件赋值、取值
- CheckBoxList和RadioButtonList的使用(后台取值和赋值)
- 使用RadioButtonGroup 取值和赋值的例子
- 使用RadioButtonGroup 取值和赋值的例子
- 位向量的解读(初始化、赋值、取值)
- jQuery控件取值,赋值
- VC++ 控件赋值取值
- 分享关于Extjs2.0中RadioGroup和CheckboxGroup控件的取值和赋值问题
- 根据控件名、属性名进行取值和赋值
- 根据控件名、属性名进行取值和赋值
- 循环中的控件动态赋值和取值c#
- FCKEditor的赋值和取值操作
- Ext---CheckBoxGroup的取值和赋值
- CheckGroupBox的取值和赋值问题
- CKeditor的取值和赋值
- 【自然框架】之 “工作日志”和“选择日期”
- 论管理员的不作为!!!
- 【自然框架】之“元数据”的威力
- 【自然框架】之通用权限的Demo(二):添加人员、添加账户、添加角色里面的账户以及列表的权限验证
- 【自然框架】之“解耦”初探
- 使用接口来统一控件的取值、赋值和初始化
- 一起学习ArcEngine(8)鹰眼
- reactos操作系统实现(98)
- 【自然框架】表单控件 之 一个表单修改多个表里的记录
- 【自然框架】之 “表单控件”与“实体类”
- 【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!
- 【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】
- 主流想法、我的想法,和自我检讨
- 弱弱问一下,这两个图,是不是传说中的ER图呀?