CheckedListBox控件使用

在使用CheckedListBox的时候,遇到了不少的问题,写在这里,希望可以抛砖引玉。


1,数据源绑定及全选


		DataSet ds = sqlHelper.ExecuteQuery("TEST_GET_SCREW", CommandType.StoredProcedure);
                ScrewSelect.DataSource = ds.Tables[0];
                ScrewSelect.DisplayMember = ds.Tables[0].Columns[1].ColumnName;
                ScrewSelect.ValueMember = ds.Tables[0].Columns[0].ColumnName;
                

                for (int i = 0; i < ScrewSelect.Items.Count; i++)
                {
                    ScrewSelect.SetItemChecked(i, true);
                }

在绑定的时候,使用了自己封装的数据库协助类。

绑定顺序是有要求的,否则显示出来的控件会出现值显示为DataRowView这个类名。

第二行作用是绑定数据源。

第三行是设定了显示值的列。

第四行是设定了选定值得列。


而for循环则是用于进行全选。


2,数据选定显示

	    if (CarTypeSelect.CheckedItems.Count != 0)
            {
                string s = "";
                for (int x = 0; x <= CarTypeSelect.CheckedItems.Count - 1; x++)
                {
                    s = s + "Checked Item " + (x + 1).ToString() + " = " + ((DataRowView)CarTypeSelect.CheckedItems[x]).Row[0] + "\n";
                }
                MessageBox.Show(s);
            }

先于判断,是否有选中的项,否则不用进行循环。

此处需要注意一点,CheckedListBox中,有两个意思相近的属性。一个是CheckedItems,另一个是SelectedItems。

两者的区别在于,如果是在对于SelectedChange消息响应的函数中,CheckedItems.Count总是比SelectedItems.Count多一。


而在显示值得时候,由于CheckItems数组中保存的是object类的对象,但是实际上保存了DataRowView类对象。

所以可以考虑使用强制转换的方法进行值得读取。

你可能感兴趣的:(CheckedListBox控件使用)