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

 

      这里说的控件主要指的是文本框、下拉列表框这一类的控件,用户使用这些控件输入数据,然后我们需要提取这些数据进行处理。但是不同的控件有不同的取值方式,比如文本框要用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 也是表单控件里的一个重要元素,是用来存放字段信息的。

 

 

时间: 2024-08-03 19:04:49

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

checkbox控件后台取值(在火狐浏览器浏览)

问题描述 checkbox控件后台取值使用request.form[""],在谷歌浏览器可以获得值,但是在火狐浏览器获取不到,查看了jquery兼容性问题也未检查出问题所在,求大神啊 解决方案 解决方案二:这问题没法回答额...难道做各种猜测?解决方案三:后台代码:DataSource=DataSource+"[";if(!string.IsNullOrEmpty(Request.Form["COtherDoc"])){OtherDoc=&quo

浅析jQuery操作select控件的取值和设值_jquery

1.级联select的操作,后一个select的值随着前一个select选中值变化 $(".select_A").change(function(){ $(".select_B").empty();// 清空后一个select var option = $("<option>").val(1).text('xxx');// 按照实际业务要求重新赋值option $(".select_B").append(optio

基于Jquery的动态添加控件并取值的实现代码_jquery

复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Jquery动态控件</title> <script src="jquery-1.4.2.js" type="text/javascript"></script> <script ty

Jquery给基本控件的取值、赋值示例_jquery

TEXTBOX: var str =$("#txt").val(); $("#txt").val(Value); //文本框,文本区域: $("#text_id").attr("value",'');//清空内容 $("#text_id").attr("value",'test');//填充内容 LABLE: var str =$("#lbl").text(); $(

Jquery主要控件的取值、赋值,包括textbox,button,lable,radio,chec

textbox:var str = $('#txt').val();  $('#txt').val("Set Lbl Value");   //文本框,文本区域: $("#text_id").attr("value",'');//清空内容 $("#text_id").attr("value",'test');//填充内容   lable:   var str = $('#lbl').text(); $('#

CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值(十四)

上一篇:CYQ.Data 轻量数据层之路 使用篇二曲 MAction 数据查询(十三)   内容概要 本篇继续上一篇内容,本节介绍所有取值与赋值的相关操作.1:原生:像操作Row一样 2:扩展:对UI操作 GetFrom与SetTo 3:扩展:非UI操作 Get与Set   代码共同部分提前说明,我们假设以通过以下方法查询完一行数据 MAction action = new MAction(TableNames.Users);if (action.Fill("UserName='路过秋天'&qu

使用回调接口实现ActiveX控件和它的容器程序的通讯

本文阅读基础:有一定的C++基础知识(了解继承.回调函数),对MFC的消息机制有一定了解,对COM的基础知识有一定了解,对ActiveX控件有一定了解. 一. 前言      ActiveX控件和它的容器程序如何通讯是一个值得研究的问题,因为这涉及到ActiveX控件和它的容器程序如何交互的问题.VC知识库的杨老师写了一系列博客介绍了一些通讯方式.链接如下: COM 组件设计与应用(十三)--事件和通知(VC6.0) COM 组件设计与应用(十四)--事件和通知(vc.net) COM 组件设计

vs2005不能绑定变量了吗?还有Datalist的页角控件如何取

问题描述 <asp:LabelID="Label4"runat="server"Text="<%#s%>"></asp:Label></td></tr> load里声明s变量也DataBind();了但是出错说上下文中没有s,03可以这样用05不行了吗?只能Eval()这样绑定列了吗?还有一个问题就是Datalist页角模版里加了个控件如何取他的值DataList1.FindContro

gridview控件中取当前光标所在的行,点删除摁钮,弹出对话框提示是否删除

问题描述 求助,gridview控件中取当前光标所在的行,点删除摁钮,弹出对话框提示是否删除这个代码怎么写,自己试着写一个但是不对, 解决方案 解决方案二:<asp:TemplateFieldHeaderText="编辑"ItemStyle-Width="80px"HeaderStyle-HorizontalAlign="Center"><ItemTemplate><asp:ImageButtonID="i