前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >扩展CheckBoxList实现选中绑定

扩展CheckBoxList实现选中绑定

作者头像
深蓝studyzy
发布2022-06-16 14:21:24
3600
发布2022-06-16 14:21:24
举报
文章被收录于专栏:深蓝居

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

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

(2)将该类继承自CheckBoxList。

代码语言:javascript
复制
public class CheckBoxListWithCheckBind : CheckBoxList

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

代码语言:javascript
复制
[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方法。

代码语言:javascript
复制
 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方法。

代码语言:javascript
复制
protected override void OnDataBinding(EventArgs e)
{
           base.OnDataBinding(e);
           BindChecked();
}

具体的代码如下:

代码语言:javascript
复制
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属性既可:

代码语言:javascript
复制
<cc1:CheckBoxListWithCheckBind ID="cbxl" runat="server" DataTextField="CompanyName" DataValueField="CompanyCode" DataCheckedField="IsChecked">
    </cc1:CheckBoxListWithCheckBind>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档