zoukankan      html  css  js  c++  java
  • 使用接口来统一控件的取值、赋值和初始化

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

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

          【接口定义】

    public interface IControlHelp
        {
            
    // 属性
            /// <summary>
            
    /// 统一的取值和赋值的属性
            
    /// </summary>
            
    /// <returns>控件的某个值</returns>
            string ControlValue{ getset;}

            
    // 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#应用程序中的输入法
    201871010128杨丽霞《面向对象程序设计(java)》第六七周学习总结
    201871010128杨丽霞《面向对象程序设计(java)》第一周学习总结
    201871010128杨丽霞《面向对象程序设计(java)》第二周学习总结
    201871010128杨丽霞《面向对象程序设计(java)》第四周学习总结
    201871010128杨丽霞《面向对象程序设计(java)》第七周学习总
    201871010128杨丽霞《面向对象程序设计(java)》第十周学习总结
    201871010128杨丽霞《面向对象程序设计(Java)》第十一周学习总结
    201871010128杨丽霞《面向对象程序设计(java)》第八周学习总结
    201871010128杨丽霞《面向对象程序设计(Java)》第十二周学习总结
  • 原文地址:https://www.cnblogs.com/jyk/p/1512221.html
Copyright © 2011-2022 走看看