from A Custom CheckedListBox with Datasource http://www.codeproject.com/Articles/22960/A-Custom-CheckedListBox-with-Datasource-Implementa
/// <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() + "."); } } }