绑定CheckedListBox

介绍 看起来。net CheckedListBox在ListBox和ComboBox中甚至没有主绑定工具,因为它必须在数据库中保存多个值。这篇文章介绍了一个扩展的CheckedListBox,它有一个单独的属性来设置和获取被选中的项,也有绑定工具。 问题 . net CheckedListBox没有绑定工具。 因为CheckedListBox与对象集合一起工作,所以它不能绑定到数据源。 CheckedListBox没有一个属性来表示项目是否被选中并且它必须被更改,或者很难通过一个项目或一组被选中项目的方法来获取数据。 需要 创建表示已选中项并基于其设置已选中项的公共可绑定属性。 它必须是一个属性,在设置或获取时保存单个原语类型值。 项目必须从与值数据源不同的数据源(可以是查找表)加载。 由于列表控件的性质,我们必须将其绑定到列。 使用的代码 关于如何使用文章或代码的简要描述。类名,方法和属性,任何技巧或提示。 ExCheckedListBox 在代码示例中,主要代码属于ExCheckedListBox继承自。net框架的CheckedListBox。 它扩展了CheckedListBox控件,有三个额外的属性: 1. 属性的值: 此属性是整数类型,允许基于单个值获取和设置已检查项。它使用该整数中的位,保存和检索单个列中的值。隐藏,收缩,复制Code

get
{
    ///Gets checked items in decimal mode from binary mode
    
    try
    {
        //each item in list has a number that is binary number in decimal mode
        //this number represents that number
        int poweredNumber = 1;
        //loop in all items of list
        for (int i = 0; i < this.Items.Count; i++)
        {
            //if item checked and the value doesn't contains poweredNumber 
            //then add poweredNumber to the value
            if((this.GetItemChecked(i)))
                this.value |= poweredNumber;
            //else if poweredNumber exists in the value remove from it
            else if ((this.value & poweredNumber) != 0)
                this.value -= poweredNumber;

            //raise to the power
            poweredNumber *= 2;
        }
    }
    catch (ArgumentException ex)
    {
        throw ex;
    }
    catch (Exception ex)
    {
        throw ex;
    }


    return this.value;
}
set
{
    ///sets checked items from binary mode converted from decimal value

    this.value = value;
    try
    {
        //each item in list has a number that is binary number in decimal mode
        //this number represents that number
        int poweredNumber = 1;
        //loop in all items of list
        for (int i = 0; i < this.Items.Count; i++)
        {
            //if poweredNumber exists in the value set checked on item
            if ((this.value & poweredNumber) != 0)
                this.SetItemCheckState(i, CheckState.Checked);
            //else remove checked from item
            else
                this.SetItemCheckState(i, CheckState.Unchecked);

            //raise to the power
            poweredNumber *= 2;
        }
    }
    catch (ArgumentException ex)
    {
        throw ex;
    }
    catch (Exception ex)
    {
        throw ex;
    }


}

2. DataSource属性: 此属性是一种对象类型,可以像其他集合控件(ListBox和ComboBox)一样获取和设置数据源。实际上它使用的是基本的数据源属性,但是由于CheckedListBox逻辑,它隐藏在。net CheckedListBox中。因此,我通过new关键字隐藏它并重用基础数据源保护属性。隐藏,收缩,复制Code

/// <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 <BR>///    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;
        
    }
}

3.DisplayMember属性: 这个属性是一种字符串类型,可以像其他集合控件(ListBox和ComboBox)一样获取和设置数据源特定列。 实际上它使用了基本的显示成员属性,但是由于CheckedListBox逻辑,它隐藏在。net CheckedListBox中。 所以我通过new关键字隐藏它并重用了base DisplayMember保护属性。隐藏,复制Code

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

演示项目 演示项目包含一个SQL脚本,创建两个表: 具有相同场景的产品和城市(指定城市中呈现的产品)。 的兴趣点 我想实现另一个场景(问题和答案),在这个场景中,我们必须导航问题并使用多个答案回答测试,但在数据绑定和这个场景中存在一个问题。 本文转载于:http://www.diyabc.com/frontweb/news230.html

posted @ 2020-08-04 08:20  Dincat  阅读(252)  评论(0编辑  收藏  举报