欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Winform中CheckedListBox控件的使用

程序员文章站 2022-04-12 10:34:37
...

一、CheckedListBox控件多列显示

  • 将控件的MultiColumn属性设为true;
  • 根据需要item的宽度,可以设置ColumnWidth合适的值以显示item,避免有内容被挡住,如不设置,自动给一个默认的值。(暂时没有找到如何能够根据item内容其width动态变化)

二、设置全选/全不选/取消选中

//全选
for (int i = 0; i < this.checkedListBox1.Items.Count; i++) {
    this.spatialCheckedListBox.SetItemChecked(i,true);
    //将true改为false就是全不选
    //this.spatialCheckedListBox.SetItemChecked(i, false);
}

//取消选中项
//方式一,测试中发现ClearSelected()不起作用
if(this.checkedListBox1.CheckedItems.Count > 0)
{
    this.checkedListBox1.ClearSelected();
}
//方式二,获取选中元素的下标
if(this.checkedListBox1.CheckedItems.Count > 0)
{
    foreach(int index in this.checkedListBox1.CheckedIndices)
    {
        box.SetItemChecked(index,false);
    }
}

三、绑定数据源

在VS2012中CheckedListBox控件感知不到DataSource、DisplayMember、ValueMember三个属性,但其实这三个属性CheckedListBox控件是有的。
查看MSDN上关于CheckedListBox类文档
可以看到CheckedListBox有那三个属性,可以设置该三属性值以实现绑定数据源。

1、数据来源于直接读数据库,从数据库返回DataSet,可以使用下面直接绑定的形式(快捷方便)

//dataSet是数据库取回来的数据
checkedListBox1.DataSource = dataSet.tables[0];
checkedListBox1.DisplayMember = "name";
checkedListBox1.ValueMember = "id";

2、调用后台方法(别人写的),返回的不是DataSet形式,可能是xml,可能是json或者其他数据格式。
此种情况,目前想到可以使用两种形式来设置数据源DataSource的值:

假设数据在json数组strData中
(1)构造一个实体对象Person,将数据存在该Person的id和name属性中

Person p = new Person();
List<Person> data = new List<Person>();
for(int i = 0; i< strData.length; i++){
    p.name= strData[i].name;
    p.id = strData[i].id;
    data.Add(p);
}
checkedListBox1.DataSource = data;
checkedListBox1.DisplayMember = "name";
checkedListBox1.ValueMember = "id";

(2)仿造DataSet返回DataTable的形式,自己新建一个DataTable用来存放数据

DataTable dt = new DataTable();
dt.Columns.Add("ID", Type.GetType("System.String"));//新建列名和列数据类型
dt.Columns.Add("Name",Type.GetType("System.String"));
for (int i = 0; i < strData.length; i++)
{
    string id = strData[i].id;
    string name = strData[i].name;
    dt.Rows.Add(id,name);//增加行
}
checkedListBox1.DataSource = dt;
checkedListBox1.DisplayMember = "name";
checkedListBox1.ValueMember = "id";

参考:C#创建DataTable

四、获取所有被勾选item的value值

foreach(System.Data.DataRowView item in checkedListBox.CheckedItems)
{
     MessageBox.Show(item.Row["ID"].ToString());//获取选中的value值
}

五、设置checkbox单击选中

checkedListBox.CheckOnClick = true;
相关标签: winform listbox