你的位置:首页 > ASP.net教程

[ASP.net教程]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() + ".");      }    }