使用接口来统一控件的取值、赋值和初始化

简介:       这里说的控件主要指的是文本框、下拉列表框这一类的控件,用户使用这些控件输入数据,然后我们需要提取这些数据进行处理。但是不同的控件有不同的取值方式,比如文本框要用Text,下拉列表框是SelectedValue (当然还有其他的方法),CheckBoxList也是SelectedValue,但是这个只能获取第一个选项,如果是选择了多个选项,他只能返回第一个被选中的选项。

 

      这里说的控件主要指的是文本框、下拉列表框这一类的控件,用户使用这些控件输入数据,然后我们需要提取这些数据进行处理。但是不同的控件有不同的取值方式,比如文本框要用Text,下拉列表框是SelectedValue (当然还有其他的方法),CheckBoxList也是SelectedValue,但是这个只能获取第一个选项,如果是选择了多个选项,他只能返回第一个被选中的选项。可能您觉得这个没什么的呀,很正常呀。

 

      是呀,只不过我比较懒,尤其在写表单控件的时候,如何取值就是一个大问题了。以前用很笨的方法,用case一个一个的判断,代码写起来很长也不便于扩展。后来学习了接口,发现可以定一个接口来“统一”这些控件的取值问题,而且还可以扩展。

 

      【接口定义】

public   interface  IControlHelp
    {
        
//  属性
         ///   <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

}

 

 

      【使用代码】

            IControlHelp ctrlHelp;
            
foreach  (WebControl ctrl  in   this .pnlAddUser.Controls)
            {
                ctrlHelp 
=  (IControlHelp)ctrl;
                Response.Write(ctrlHelp.ControlValue);
            }

 

      比如我们把控件都放在了一个Panel里面,那么我们就可以用遍历一下,把控件的值都取出来了。

      这个对于表单控件还是很重要的,当然了也许对于您来说一点用处都没有。我这里也只是把我的想法写一下,也许能给一些人提醒一下呢。我觉得写程序,思路更重要。

 

      其实常用的控件并不多,也就这么几个,如果不够的话,还可以随时扩展。 接口里的ShowMe是给分页控件用的,BaseInfo.ColumnsInfoForm 也是表单控件里的一个重要元素,是用来存放字段信息的。

 

 

相关文章
|
C#
Winform中关于控件统一赋值和取值的小技巧
下面都是我比较喜欢的博客园三位牛X人!特此向前辈们致敬! (1)、winform 复选框控件赋值的小技巧:http://www.cnblogs.com/wuhuacong/archive/2010/02/07/1665438.html (2)、构建 WinForm 通用速选(全选、反选、清空)组件 http://www.cnblogs.com/ldp615/archive/2009/11/29/WinForm_FastSelect_Component.html (3)、c# 扩展方法奇思妙用高级篇六:WinForm 控件选择器。
909 0
|
容器
【C++11】 统一的列表初始化( {}初始化 )
c++11为了统一初始化方式引入了列表初始化方式,也就是使用{}对变量或者结构体变量等进行初始化。本文会以简单的语言介绍c++11的列表初始化方式和std::initializer_list。
206 1
|
9月前
|
小程序
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
116 0
|
4月前
|
Java Spring
发现问题就解决,往往是低效的方式。关于对象参数的赋值取值问题
在审查中台task服务代码时,发现TaskVO对象的industryTypeName字段在某些方法调用中未进行空值检查,导致潜在bug。提出两种解决方案:一是在方法③中增加对industryTypeName的空值判断;二是改变方法③的参数类型,避免外部调用方直接设置industryTypeName,从而减少错误发生的可能性。
29 1
|
9月前
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
49 0
|
9月前
|
Java API 数据库
后台组件-常量定义
平台里有很多可配置的参数
|
9月前
|
程序员 C语言
用户自定义结构体类型
用户自定义结构体类型
71 0

热门文章

最新文章