• 给通用控件赋值


    有看到一网友在论坛上问问题,Insus.NET尝试了一下,下面提供Insus.NET所理解的基础之上的解决方案,仅供参考,原问题如下:



    在解决之前,先准备一些数据吧。端午节快到了,公司分福利,希望你们公司也有。数据集是一个Hashtable:

    private Hashtable GetData()
        {
            Hashtable ht = new Hashtable();
            ht.Add(1, "粽子");
            ht.Add(2, "苹果");
            ht.Add(3, "雪梨");
            ht.Add(4, "荔技");
            ht.Add(5, "现金");
            return ht;
        }
    View Code


    在站点上创建一个网页,在.aspx页面上,写上下面代码:



    到Insus.NET的博客上,下载两个给件,是专为ListControl绑定的,已经重构过了的:
    http://www.cnblogs.com/insus/archive/2013/01/28/2880618.html

    http://www.cnblogs.com/insus/archive/2009/12/13/1622884.html

    解压之后,把DLL拉入BIN目录中。如:



    然后,我们去.aspx.cs为页面的CheckBoxList,DropDownList,RadioButtonList控件绑定数据源。



    接下来,我们想在文本框填入一些值,这个值能够指向那些控件中选项的值,如果没有对应的值,控件将是回归至默认(缺省值)的状态。由于每个控件是不同的对象,为了能让它们能够互动,有一致的动作,Insus.NET写一个接口:



    下面,要看你需要什么控件来互动了,也就是什么控件来接收文本框的值了。需要的控件,均接中写一个适配器(Adapter),由于Insus.NET仅列举了三个,因此分别写三个适配器。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    /// <summary>
    /// Summary description for InsusCheckBoxList
    /// </summary>
    namespace Insus.NET
    {
        public class InsusCheckBoxList: InsusAdapter
        {
            CheckBoxList _CheckBoxList;
            
            public InsusCheckBoxList()
            {
                //
                // TODO: Add constructor logic here
                //
            }
    
            public void SetValue(WebControl wc, object value)
            {
                if (wc is CheckBoxList)
                {
                    _CheckBoxList = (CheckBoxList)wc;
    
                    foreach (ListItem li in this._CheckBoxList.Items)
                    {
                        li.Selected = li.Text == value.ToString() ? true : false;                    
                    }
                }
            }
        }
    }
    InsusCheckBoxList
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    /// <summary>
    /// Summary description for InsusDropDownList
    /// </summary>
    namespace Insus.NET
    {
       
        
        public class InsusDropDownList: InsusAdapter 
        {
           DropDownList _DropDownList;
            
            public InsusDropDownList()
            {
                //
                // TODO: Add constructor logic here
                //
            }
    
            public void SetValue(WebControl wc, object value)
            {
                if (wc is DropDownList)
                {
                    _DropDownList = (DropDownList)wc;
    
                    this._DropDownList.ClearSelection();
                    foreach (ListItem li in this._DropDownList.Items)
                    {
                        if (li.Text == value.ToString ())
                            this._DropDownList.Items.FindByText(value.ToString()).Selected = true;                   
                    }
                }
            }
        }
    }
    InsusDropDownList
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    /// <summary>
    /// Summary description for InsusRadioButtonList
    /// </summary>
    namespace Insus.NET
    {
        public class InsusRadioButtonList: InsusAdapter
    
        {
            RadioButtonList _RadioButtonList;
            
            public InsusRadioButtonList()
            {
                //
                // TODO: Add constructor logic here
                //
            }
    
            public void SetValue(WebControl wc, object value)
            {
                if (wc is RadioButtonList)
                {
                    _RadioButtonList = (RadioButtonList)wc;
                                   
                    foreach (ListItem li in this._RadioButtonList.Items)
                    {
                        li.Selected = li.Text == value.ToString() ? true : false; 
                    }
                }
            }
        }
    }
    InsusRadioButtonList

     如果还有基它,继续写出来......
    下面就是Button按钮的Click事件:



    好了,还是看看最终的效果吧:

     

    以下内容,于2013-06-11 09:00添加:

    早上来看到第一次所想的,有些地方,觉得设计不好。按照面向对象的设计理念来说,接口设计的藕合性过高,接口内方法SetValue需要带两个参数。理想的带一个参数为好。
    因此,Insus.NET把接口改为:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    /// <summary>
    /// Summary description for InsusAdapter
    /// </summary>
    namespace Insus.NET
    {
        public interface InsusAdapter
        {
            void SetValue(object value);
        }
    }
    View Code


    这样一改的话,那怎样知道是给那个一个控制赋值? 解决这个问题,我们可以使用构造函数来处理。回到上面的那三个适配器InsusCheckBoxList,InsusDropDownList,InsusRadioButtonList,下面是重构好之后的适配器:

    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    /// <summary>
    /// Summary description for InsusCheckBoxList
    /// </summary>
    namespace Insus.NET
    {
        public class InsusCheckBoxList : InsusAdapter
        {
            CheckBoxList _CheckBoxList;
    
            public InsusCheckBoxList(CheckBoxList checkBoxList)
            {
                this._CheckBoxList = checkBoxList;
            }
    
            public void SetValue(object value)
            {
                foreach (ListItem li in this._CheckBoxList.Items)
                {
                    li.Selected = li.Text == value.ToString() ? true : false;
                }
            }
        }
    }
    InsusCheckBoxList
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    /// <summary>
    /// Summary description for InsusDropDownList
    /// </summary>
    namespace Insus.NET
    {
        public class InsusDropDownList : InsusAdapter
        {
            DropDownList _DropDownList;
    
            public InsusDropDownList(DropDownList dropDownList)
            {
                this._DropDownList = dropDownList;
            }
           
            public void SetValue(object value)
            {
                this._DropDownList.ClearSelection();
                foreach (ListItem li in this._DropDownList.Items)
                {
                    if (li.Text == value.ToString())
                        this._DropDownList.Items.FindByText(value.ToString()).Selected = true;
                }
            }
        }
    }
    InsusDropDownList
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    /// <summary>
    /// Summary description for InsusRadioButtonList
    /// </summary>
    namespace Insus.NET
    {
        public class InsusRadioButtonList : InsusAdapter
        {
            RadioButtonList _RadioButtonList;
    
            public InsusRadioButtonList(RadioButtonList radioButtonList)
            {
                this._RadioButtonList = radioButtonList;
            }
    
            public void SetValue(object value)
            {
                foreach (ListItem li in this._RadioButtonList.Items)
                {
                    li.Selected = li.Text == value.ToString() ? true : false;
                }
            }
        }
    }
    InsusRadioButtonList

    重构之后,控件就可以在适配器new实例化时,就传入去了。



    可以参考下面重构全过程:



    以下内容,于2013-06-11 10:20添加:

    此部分内容,只是重构一下comments的语句,因为每个控件的适配器有实作接口,所以使用多态来重构它们。



  • 相关阅读:
    手机app打开的web,在打开chrome浏览器
    linux环境下安装yaf
    redis在ubuntu下的安装
    验证一个值是否在多维数组中
    20个正则表达式
    nginx+memcached缓存图片
    cocos2dx加载骨骼动画,获取骨骼位置
    listview的pushBackDefaultItem中的item属性被修改问题
    lua保留n位小数方法
    cocos2dx中node的pause函数(lua)
  • 原文地址:https://www.cnblogs.com/insus/p/3130925.html
Copyright © 2020-2023  润新知