加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

扩展CheckBoxList实现选中绑定

发布时间:2020-12-14 23:55:39 所属栏目:资源 来源:网络整理
导读:CheckBoxList中有DataTextField和DataValueField可以用于设置绑定时的绑定对象属性,但是可惜针对CheckBoxList却没有办法直接绑定一个Item是否被选中。于是我打算扩展一下CheckBoxList,使得该控件可以绑定Checked状态。具体做法是这样的: (1)新建一个Web

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

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

(2)将该类继承自CheckBoxList。

  CheckBoxListWithCheckBind : CheckBoxList

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

<pre class="csharpcode">[Bindable(<span class="kwrd">true)][Category(<span class="str">"Appearance")][DefaultValue(<span class="str">"")][Localizable(<span class="kwrd">true)]<span class="kwrd">public <span class="kwrd">string DataCheckedField{ get { String s = (String)ViewState[<span class="str">"DataCheckedField"];<span class="kwrd">return ((s == <span class="kwrd">null) ? String.Empty : s); } set { ViewState[<span class="str">"DataCheckedField"] = <span class="kwrd">value; }}

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

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

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

<pre class="csharpcode"><span class="kwrd">protected <span class="kwrd">override <span class="kwrd">void OnDataBinding(EventArgs e){<span class="kwrd">base.OnDataBinding(e); BindChecked();}

具体的代码如下:

<div class="cnblogs_code">
<img id="Code_Closed_Image_001302" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_001302').style.display='none'; document.getElementById('Code_Open_Image_001302').style.display='inline'; document.getElementById('Code_Open_Text_001302').style.display='inline';" src="https://www.52php.cn/res/2019/02-14/22/1c53668bcee393edac0d7b3b3daff1ae.gif" align="top" height="16" width="11"><img id="Code_Open_Image_001302" style="display: none;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_001302').style.display='none'; getElementById('Code_Closed_Image_001302').style.display='inline'; getElementById('Code_Closed_Text_001302').style.display='inline';" src="https://www.52php.cn/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" align="top" height="16" width="11"><span id="Code_Closed_Text_001302" class="cnblogs_code_Collapse">完整代码<span id="Code_Open_Text_001302" style="display: none;"><span style="color: #0000ff;">public<span style="color: #000000;">?<span style="color: #0000ff;">class<span style="color: #000000;">?CheckBoxListWithCheckBind?:?CheckBoxList????{????????[Bindable(<span style="color: #0000ff;">true<span style="color: #000000;">)]????????[Category(<span style="color: #800000;">"<span style="color: #800000;">Appearance<span style="color: #800000;">"<span style="color: #000000;">)]????????[DefaultValue(<span style="color: #800000;">""<span style="color: #000000;">)]????????[Localizable(<span style="color: #0000ff;">true<span style="color: #000000;">)]????????<span style="color: #0000ff;">public<span style="color: #000000;">?<span style="color: #0000ff;">string<span style="color: #000000;">?DataCheckedField????????{????????????<span style="color: #0000ff;">get<span style="color: #000000;">????????????{????????????????String?s?<span style="color: #000000;">=<span style="color: #000000;">?(String)ViewState[<span style="color: #800000;">"<span style="color: #800000;">DataCheckedField<span style="color: #800000;">"<span style="color: #000000;">];????????????????<span style="color: #0000ff;">return<span style="color: #000000;">?((s?<span style="color: #000000;">==<span style="color: #000000;">?<span style="color: #0000ff;">null<span style="color: #000000;">)?<span style="color: #000000;">?<span style="color: #000000;">?String.Empty?:?s);????????????}????????????<span style="color: #0000ff;">set<span style="color: #000000;">????????????{????????????????ViewState[<span style="color: #800000;">"<span style="color: #800000;">DataCheckedField<span style="color: #800000;">"<span style="color: #000000;">]?<span style="color: #000000;">=<span style="color: #000000;">?value;????????????}????????}????????<span style="color: #0000ff;">protected<span style="color: #000000;">?<span style="color: #0000ff;">override<span style="color: #000000;">?<span style="color: #0000ff;">void<span style="color: #000000;">?OnDataBinding(EventArgs?e)????????{????????????<span style="color: #0000ff;">base<span style="color: #000000;">.OnDataBinding(e);????????????BindChecked();????????}????????<span style="color: #0000ff;">private<span style="color: #000000;">?<span style="color: #0000ff;">void<span style="color: #000000;">?BindChecked()????????{????????????var?dataSource?<span style="color: #000000;">=<span style="color: #000000;">?<span style="color: #0000ff;">this<span style="color: #000000;">.DataSource?<span style="color: #0000ff;">as<span style="color: #000000;">?IEnumerable;????????????<span style="color: #0000ff;">if<span style="color: #000000;">(dataSource<span style="color: #000000;">==<span style="color: #0000ff;">null<span style="color: #000000;">)????????????{????????????????<span style="color: #0000ff;">return<span style="color: #000000;">;????????????}????????????<span style="color: #0000ff;">foreach<span style="color: #000000;">?(<span style="color: #0000ff;">object<span style="color: #000000;">?obj2?<span style="color: #0000ff;">in<span style="color: #000000;">?dataSource)????????????{????????????????var?value?<span style="color: #000000;">=<span style="color: #000000;">?DataBinder.GetPropertyValue(obj2,?DataValueField,?<span style="color: #0000ff;">null<span style="color: #000000;">);????????????????ListItem?item?<span style="color: #000000;">=<span style="color: #000000;">?<span style="color: #0000ff;">this<span style="color: #000000;">.Items.FindByValue(value);????????????????<span style="color: #0000ff;">if<span style="color: #000000;">?(DataCheckedField.Length?<span style="color: #000000;">><span style="color: #000000;">?<span style="color: #800080;">0<span style="color: #000000;">)????????????????{????????????????????item.Selected?<span style="color: #000000;">=<span style="color: #000000;">?Convert.ToBoolean(DataBinder.GetPropertyValue(obj2,?DataCheckedField,?<span style="color: #0000ff;">null<span style="color: #000000;">));????????????????}????????????}????????}????}

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

<pre class="csharpcode"><cc1:CheckBoxListWithCheckBind ID=<span class="str">"cbxl" runat=<span class="str">"server" DataTextField=<span class="str">"CompanyName" DataValueField=<span class="str">"CompanyCode" DataCheckedField=<span class="str">"IsChecked"> </cc1:CheckBoxListWithCheckBind>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读