ASP.NET CheckBoxList DataBinding Question

后端 未结 4 1938
时光取名叫无心
时光取名叫无心 2020-12-29 21:37

Is it possible to DataBind an ASP.NET CheckBoxList such that a string value in the data becomes the label of the check box and a bool value checks/unchecks the box?

4条回答
  •  北荒
    北荒 (楼主)
    2020-12-29 21:57

    I made a custom control for this, after getting tired of the OnItemDataBound-binding. It will let you bind the Selected attribute. You can easily make the same control for RadioButtonList by changing what the custom control derives from.

    To use this, simply add the DataCheckedField attribute when you create the control in your markup. Remember to reference the custom controls in your web.config file.

    Markup

    
    

    Code for the control

    public class SimpleCheckBoxList : System.Web.UI.WebControls.CheckBoxList
    {
        public string DataCheckedField
        {
            get
            {
                string s = (string)ViewState["DataCheckedField"];
                return (s == null) ? String.Empty : s;
            }
            set
            {
                ViewState["DataCheckedField"] = value;
                if (Initialized)
                    OnDataPropertyChanged();
            }
        }
    
        protected override void PerformDataBinding(IEnumerable dataSource)
        {
            if (dataSource != null)
            {
                if (!this.AppendDataBoundItems)
                    this.Items.Clear();
    
                if (dataSource is ICollection)
                    this.Items.Capacity = (dataSource as ICollection).Count + this.Items.Count;
    
                foreach (object dataItem in dataSource)
                {
                    ListItem item = new ListItem()
                    {
                        Text = DataBinder.GetPropertyValue(dataItem, DataTextField).ToString(),
                        Value = DataBinder.GetPropertyValue(dataItem, DataValueField).ToString(),
                        Selected = (DataCheckedField.Length > 0) ? (bool)DataBinder.GetPropertyValue(dataItem, DataCheckedField) : false
                    };
                    this.Items.Add(item);
                }
            }
        }
    }
    

提交回复
热议问题