zoukankan      html  css  js  c++  java
  • 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);
                }
    

      

  • 相关阅读:
    Linux命令行和Shell脚本编程
    Excel自动触发时间
    dom4j读取xml文件 简单例子
    GSM & Foxit Reader
    ThreadPoolExecutor 线程池
    Linux /var/log
    delphi开发技巧
    利用ScktSrvr打造多功能Socket服务器
    delphi中Windows消息大全使用详解
    自己构造注入点方便入侵
  • 原文地址:https://www.cnblogs.com/geovindu/p/4491146.html
Copyright © 2011-2022 走看看