扩展CheckBoxList实现选中绑定
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实现选中绑定相关推荐
- 扩展SpringMVC以支持绑定JSON格式的请求参数
2019独角兽企业重金招聘Python工程师标准>>> 上一篇:<扩展SpringMVC以支持更精准的数据绑定> 此方案是把请求参数(JSON字符串)绑定到java对象, ...
- easyui 扩展tree 获取选中节点的级数
2019独角兽企业重金招聘Python工程师标准>>> //扩展tree, 增加getLevel方法$.extend($.fn.tree.methods, {getLevel:fun ...
- Unity Cinemachine智能相机教程(五):VirtualCamera的Extension扩展
摘要:[长文预警,先收藏后品尝]如何让相机更智能呢?Extension扩展可以给虚拟相机带来无限的可能. 洪流学堂,让你快人几步.你好,我是跟着大智(VX: zhz11235)学Unity的萌新,我叫 ...
- 技术图文:C# 语言中的扩展方法
背景 前段时间,在知识星球立了一个Flag,在总结 Leetcode 刷题的第五篇图文时遇到了扩展方法 这个知识点,于是先总结一下. 1.扩展方法概述 扩展方法能够向现有类型"添加" ...
- C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型...
本文内容: 继承 Equal示例 结构和类 属性 Ref and Out 类操作 扩展方法 接口 可空类型 分部类 1. 继承 using System; using System.Collectio ...
- Java中的“可运行的实现”与“扩展线程”
从什么时候开始在Java中使用线程开始,我发现了以下两种编写线程的方法: 与implements Runnable : public class MyRunnable implements Runna ...
- 通过“四大行为”对WCF的扩展[原理篇]
整个WCF框架由两个基本的层次构成,即服务模型层和信道层.对信道层的扩展主要通过针对绑定的扩展实现,具体来说就是自定义绑定元素,以及相关的信道管理器(信道监听器和信道工厂).信道来改变对消息的处理和传 ...
- 如何删除Safari浏览器的扩展程序 大神教你搞定
对于 Mac 用户来说,在 Safari 浏览器中添加扩展程序是非常有用的,用苹果的话来说就是"让你用自己想要的方式来探索网络".那么问题来了,我们应该如何删除这些扩展程序呢?如果 ...
- 自定义消息编码绑定实现
扩展WCF 消息编码绑定,需实现MessageEncodingBindingElement,MessageEncoder,MessageEncoderFactory.如果希望通过配置的方式应用我们实现 ...
最新文章
- javascript小游戏代码_Cocos Creator下JavaScript实现相邻动物同化小游戏,附代码
- 2018收官蓉城,探秘多媒体开发新趋势
- eureka-7-多网卡下的ip选择
- K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?
- 怎么在pptv里下载电视剧
- 信息学奥赛一本通C++语言——1105:数组逆序重存放
- shell交互式输入
- 【python基础语法】range() 序列类型range
- Ubuntu下完全删除Edraw软件
- 第三方支付api接口是什么?
- selenium自动登录qq空间
- MySQL 窗函数 流动平均数 running average
- android 5.0一键刷机教程,HTC D820t (Desire 820 移动4G Android 5.0)一键刷机教程,轻松刷机...
- 英语口语120句(zt)
- 不规则裁剪图片css,使用CSS的clip-path属性实现不规则图形的显示
- 第一章 TCG 规范科普解读
- c语言编写f16仿真程序,想学习一下 用C语言开发PIC的F16和F18系列单片机, 结果让IDE开发环境给搞悲剧,巨难用,...
- 超级IP哈利波特改编,网易这款刷爆朋友圈的手游究竟怎么样?
- java 筛选文件后缀为.txt文件
- R语言爬虫慕课网课程信息(超级详细!)
热门文章
- 与图片相关的几个库的编译
- Rwordseg安装
- 【Flink】 Flink 应用资源分配问题排查思路
- 【Elasticsearch】Kibana优化过程(Optimize)过长或无法结束的解决方案
- 【Elasticsearch】 elasticsearch之Recovery 手动触发索引滚动
- 10-10-030-简介-Kafka之数据存储
- 【MySQL】MySQL常见的读写分离方法
- android中级组件,第3章 Android组件--3.3 Android中级组件【含答案】 Android应用开发基础...
- mysql 获取日期每行_我如何从MySQL表行获取日期和时间
- SpringBoot配置ELK环境