CheckBoxList中有DataTextField和DataValueField可以用于设置绑定时的绑定对象属性,但是可惜针对CheckBoxList却没有办法直接绑定一个Item是否被选中。于是我打算扩展一下CheckBoxList,使得该控件可以绑定Checked状态。具体做法是这样的:

(1)新建一个Web服务器控件项目,添加Web服务器控件类CheckBoxListWithCheckBind。

(2)将该类继承自CheckBoxList。

public class CheckBoxListWithCheckBind : CheckBoxList

(3)增加属性DataCheckedField,用于指定绑定Checked状态的属性名字符串。

[Bindable(true)][Category("Appearance")][DefaultValue("")][Localizable(true)]public string DataCheckedField{    get    {        String s = (String)ViewState["DataCheckedField"];return ((s == null) ? String.Empty : s);    }    set    {        ViewState["DataCheckedField"] = value;    }}

(4)增加BindChecked方法,用于绑定CheckBoxList中的每个Item的Selected属性,这里使用Items.FindByValue方法来找Item的,这里认为每个Item的Value是不同的。如果是Item的Text是不同的,那么也可以使用Items.FindByText方法。

 private void BindChecked(){    var dataSource = this.DataSource as IEnumerable;if(dataSource==null)    {return;    }foreach (object obj2 in dataSource)    {        var value = DataBinder.GetPropertyValue(obj2, DataValueField, null);        ListItem item = this.Items.FindByValue(value);if (DataCheckedField.Length > 0)        {            item.Selected = Convert.ToBoolean(DataBinder.GetPropertyValue(obj2, DataCheckedField, null));        }    }}

(5)重写OnDataBinding方法,在基类的OnDataBinding方法后调用前面写的BindChecked方法。

protected override void OnDataBinding(EventArgs e){base.OnDataBinding(e);           BindChecked();}

具体的代码如下:

完整代码
public class CheckBoxListWithCheckBind : CheckBoxList
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string DataCheckedField
        {
            get
            {
                String s = (String)ViewState["DataCheckedField"];
                return ((s == null) ? String.Empty : s);
            }
            set
            {
                ViewState["DataCheckedField"] = value;
            }
        }
        protected override void OnDataBinding(EventArgs e)
        {
            base.OnDataBinding(e);
            BindChecked();
        }

private void BindChecked()
        {
            var dataSource = this.DataSource as IEnumerable;
            if(dataSource==null)
            {
                return;
            }
            foreach (object obj2 in dataSource)
            {
                var value = DataBinder.GetPropertyValue(obj2, DataValueField, null);
                ListItem item = this.Items.FindByValue(value);
                if (DataCheckedField.Length > 0)
                {
                    item.Selected = Convert.ToBoolean(DataBinder.GetPropertyValue(obj2, DataCheckedField, null));
                }
            }
        }
    }

接下来的使用方法就很简单了,直接在aspx页面上写该控件的DataCheckedField属性既可:

<cc1:CheckBoxListWithCheckBind ID="cbxl" runat="server" DataTextField="CompanyName" DataValueField="CompanyCode" DataCheckedField="IsChecked">    </cc1:CheckBoxListWithCheckBind>

转载于:https://www.cnblogs.com/studyzy/archive/2009/08/04/1538039.html

扩展CheckBoxList实现选中绑定相关推荐

  1. 扩展SpringMVC以支持绑定JSON格式的请求参数

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇:<扩展SpringMVC以支持更精准的数据绑定> 此方案是把请求参数(JSON字符串)绑定到java对象, ...

  2. easyui 扩展tree 获取选中节点的级数

    2019独角兽企业重金招聘Python工程师标准>>> //扩展tree, 增加getLevel方法$.extend($.fn.tree.methods, {getLevel:fun ...

  3. Unity Cinemachine智能相机教程(五):VirtualCamera的Extension扩展

    摘要:[长文预警,先收藏后品尝]如何让相机更智能呢?Extension扩展可以给虚拟相机带来无限的可能. 洪流学堂,让你快人几步.你好,我是跟着大智(VX: zhz11235)学Unity的萌新,我叫 ...

  4. 技术图文:C# 语言中的扩展方法

    背景 前段时间,在知识星球立了一个Flag,在总结 Leetcode 刷题的第五篇图文时遇到了扩展方法 这个知识点,于是先总结一下. 1.扩展方法概述 扩展方法能够向现有类型"添加" ...

  5. C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型...

    本文内容: 继承 Equal示例 结构和类 属性 Ref and Out 类操作 扩展方法 接口 可空类型 分部类 1. 继承 using System; using System.Collectio ...

  6. Java中的“可运行的实现”与“扩展线程”

    从什么时候开始在Java中使用线程开始,我发现了以下两种编写线程的方法: 与implements Runnable : public class MyRunnable implements Runna ...

  7. 通过“四大行为”对WCF的扩展[原理篇]

    整个WCF框架由两个基本的层次构成,即服务模型层和信道层.对信道层的扩展主要通过针对绑定的扩展实现,具体来说就是自定义绑定元素,以及相关的信道管理器(信道监听器和信道工厂).信道来改变对消息的处理和传 ...

  8. 如何删除Safari浏览器的扩展程序 大神教你搞定

    对于 Mac 用户来说,在 Safari 浏览器中添加扩展程序是非常有用的,用苹果的话来说就是"让你用自己想要的方式来探索网络".那么问题来了,我们应该如何删除这些扩展程序呢?如果 ...

  9. 自定义消息编码绑定实现

    扩展WCF 消息编码绑定,需实现MessageEncodingBindingElement,MessageEncoder,MessageEncoderFactory.如果希望通过配置的方式应用我们实现 ...

最新文章

  1. javascript小游戏代码_Cocos Creator下JavaScript实现相邻动物同化小游戏,附代码
  2. 2018收官蓉城,探秘多媒体开发新趋势
  3. eureka-7-多网卡下的ip选择
  4. K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?
  5. 怎么在pptv里下载电视剧
  6. 信息学奥赛一本通C++语言——1105:数组逆序重存放
  7. shell交互式输入
  8. 【python基础语法】range() 序列类型range
  9. Ubuntu下完全删除Edraw软件
  10. 第三方支付api接口是什么?
  11. selenium自动登录qq空间
  12. MySQL 窗函数 流动平均数 running average
  13. android 5.0一键刷机教程,HTC D820t (Desire 820 移动4G Android 5.0)一键刷机教程,轻松刷机...
  14. 英语口语120句(zt)
  15. 不规则裁剪图片css,使用CSS的clip-path属性实现不规则图形的显示
  16. 第一章 TCG 规范科普解读
  17. c语言编写f16仿真程序,想学习一下 用C语言开发PIC的F16和F18系列单片机, 结果让IDE开发环境给搞悲剧,巨难用,...
  18. 超级IP哈利波特改编,网易这款刷爆朋友圈的手游究竟怎么样?
  19. java 筛选文件后缀为.txt文件
  20. R语言爬虫慕课网课程信息(超级详细!)

热门文章

  1. 与图片相关的几个库的编译
  2. Rwordseg安装
  3. 【Flink】 Flink 应用资源分配问题排查思路
  4. 【Elasticsearch】Kibana优化过程(Optimize)过长或无法结束的解决方案
  5. 【Elasticsearch】 elasticsearch之Recovery 手动触发索引滚动
  6. 10-10-030-简介-Kafka之数据存储
  7. 【MySQL】MySQL常见的读写分离方法
  8. android中级组件,第3章 Android组件--3.3 Android中级组件【含答案】 Android应用开发基础...
  9. mysql 获取日期每行_我如何从MySQL表行获取日期和时间
  10. SpringBoot配置ELK环境