csharp:A Custom CheckedListBox with Datasource

 /// <summary>
    /// (eraghi)
    /// Custom CheckedListBox with binding facilities (Value property)
    /// from A Custom CheckedListBox with Datasource  http://www.codeproject.com/Articles/22960/A-Custom-CheckedListBox-with-Datasource-Implementa
    /// </summary>
    [ToolboxBitmap(typeof(CheckedListBox))]
    public class DuCheckedListBox : CheckedListBox
    {
        /// <summary>
        /// Default constructor
        /// </summary>
        public DuCheckedListBox()
        {
            this.CheckOnClick = true;

        }



        /// <summary>
        ///    Gets or sets the property to display for this CustomControls.CheckedListBox.
        ///
        /// Returns:
        ///     A System.String specifying the name of an object property that is contained
        ///     in the collection specified by the CustomControls.CheckedListBox.DataSource
        ///     property. The default is an empty string ("").
        /// </summary>
        [DefaultValue("")]
        [TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3de65a4a-2b5f-4d9d-88de-bfb692b10f93")]
        [Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3de65a4a-2b5f-4d9d-88de-bfb692b10f93", typeof(UITypeEditor))]
        [Browsable(true)]
        public new string DisplayMember
        {
            get
            {
                return base.DisplayMember;
            }
            set
            {
                base.DisplayMember = value;

            }
        }

        /// <summary>
        ///    Gets or sets the property to get the values for this CustomControls.CheckedListBox.
        ///
        /// Returns:
        ///     A System.String specifying the name of an object property that is contained
        ///     in the collection specified by the CustomControls.CheckedListBox.DataSource
        ///     property. The default is an empty string ("").
        /// </summary>
        [DefaultValue("")]
        [TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3de65a4a-2b5f-4d9d-88de-bfb692b10f93")]
        [Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3de65a4a-2b5f-4d9d-88de-bfb692b10f93", typeof(UITypeEditor))]
        [Browsable(true)]
        public new string ValueMember
        {
            get
            {
                return base.ValueMember;
            }
            set
            {
                base.ValueMember = value;

            }
        }


        /// <summary>
        /// Gets or sets the data source for this CustomControls.CheckedListBox.
        /// Returns:
        ///    An object that implements the System.Collections.IList or System.ComponentModel.IListSource
        ///    interfaces, such as a System.Data.DataSet or an System.Array. The default
        ///    is null.
        ///
        ///Exceptions:
        ///  System.ArgumentException:
        ///    The assigned value does not implement the System.Collections.IList or System.ComponentModel.IListSource
        ///    interfaces.
        /// </summary>
        [DefaultValue("")]
        [AttributeProvider(typeof(IListSource))]
        [RefreshProperties(RefreshProperties.All)]
        [Browsable(true)]
        public new object DataSource
        {
            get
            {
                return base.DataSource;
            }
            set
            {
                base.DataSource = value;

            }
        }

        /// <summary>
        /// Gets and sets an integer array of the values based on checked items values ID
        /// </summary>
        [Bindable(true), Browsable(true)]
        public List<int> ValueList
        {
            get
            {
                ///Gets checked items id values in a list
                List<int> retArray = new List<int>();
                PropertyDescriptor prop = null;
                PropertyDescriptorCollection propList = this.DataManager.GetItemProperties();
                prop = propList.Find(this.ValueMember, false);
                object checkedItem;
                if (prop != null)
                {
                    for (int i = 0; i < this.Items.Count; i++)
                    {
                        if (this.GetItemChecked(i))
                        {
                            checkedItem = this.DataManager.List[i];
                            retArray.Add(Convert.ToInt32(prop.GetValue(checkedItem).ToString()));
                        }
                    }
                }
                return retArray;
            }

            set
            {
                ///Sets checked items base on id values in a list
                List<int> myList = value;
                PropertyDescriptor prop = null;
                PropertyDescriptorCollection propList = this.DataManager.GetItemProperties();
                prop = propList.Find(this.ValueMember, false);
                object checkedItem;
                int intValItem;
                int found;
                if (prop != null)
                {
                    for (int i = 0; i < this.Items.Count; i++)
                    {
                        checkedItem = this.DataManager.List[i];
                        intValItem = Convert.ToInt32(prop.GetValue(checkedItem).ToString());
                        found = (from c in myList where c == intValItem select c).Count();
                        if (found == 1)
                            this.SetItemCheckState(i, CheckState.Checked);
                        else
                            this.SetItemCheckState(i, CheckState.Unchecked);
                    }
                }
            }
        }
    }

  测试:

        DataTable setData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Rows.Add(1, "涂聚文");
            dt.Rows.Add(2, "Geovin Du");
            dt.Rows.Add(3, "geovindu");
            dt.Rows.Add(4, "涂鸦王国");
            dt.Rows.Add(5, "涂氏");
            dt.Rows.Add(6, "张氏");
            dt.Rows.Add(7, "郭氏");
            dt.Rows.Add(8, "江氏");
            return dt;
        }

        /// <summary>
        /// 
        /// </summary>
        public CheckedlistboxForm()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CheckedlistboxForm_Load(object sender, EventArgs e)
        {
            this.duCheckedListBox1.DataSource = setData();
            this.duCheckedListBox1.DisplayMember = "Name";
            this.duCheckedListBox1.ValueMember = "ID";
            //设定
            bool  insideCheckEveryOther = true;
            for (int i = 0; i < duCheckedListBox1.Items.Count; i++)
            {
                // For every other item in the list, set as checked. 
                if ((i % 2) == 0)
                {
                    // But for each other item that is to be checked, set as being in an 
                    // indeterminate checked state. 
                    if ((i % 4) == 0)
                        duCheckedListBox1.SetItemCheckState(i, CheckState.Indeterminate);
                    else
                        duCheckedListBox1.SetItemChecked(i, true);
                }
            }
            insideCheckEveryOther = false;



        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {

            IEnumerator myEnumerator;
            myEnumerator = duCheckedListBox1.CheckedIndices.GetEnumerator();
            int y;
            //选择为全为无选
            //while (myEnumerator.MoveNext() != false)
            //{
            //    y = (int)myEnumerator.Current;
            //    duCheckedListBox1.SetItemChecked(y, false);
            //}

            //foreach (object itemChecked in duCheckedListBox1.CheckedItems)
            //{
            //    MessageBox.Show("Item with title: \"" + itemChecked.ToString() +
            //            "\", is checked. Checked state is: " +
            //            duCheckedListBox1.GetItemCheckState(duCheckedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
            //}

            foreach (DataRowView itemChecked in duCheckedListBox1.CheckedItems)
            {
                MessageBox.Show("Item with title: \"" + itemChecked[0].ToString() + itemChecked[1].ToString() +
                        "\", is checked. Checked state is: " +
                        duCheckedListBox1.GetItemCheckState(duCheckedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
            }
        }

  设置已选择项:

            //2.
            List<int> list;
            list = new List<int> { 1, 4 };
            int value = 0;
            //for (int i = 0; i < duCheckedListBox1.Items.Count; i++)
            //{
            //    DataRowView view = duCheckedListBox1.Items[i] as DataRowView;
            //    value = (int)view["ID"];
            //    if (list.Contains(value))
            //        duCheckedListBox1.SetItemChecked(i, true);
            //}
            for (int i = 0; i < duCheckedListBox1.Items.Count; i++)
            {
                DataRowView view = duCheckedListBox1.Items[i] as DataRowView;
                value = (int)view["ID"];
                if (value == 5)
                    duCheckedListBox1.SetItemChecked(i, true);
            }

  

你可能感兴趣的:(dataSource)