1、如何绑定与取值。可以使用clb.DataSource,然后设置DisplayMember和ValueMember;但这种方法绑定之后,显示是正常的,而取值(Value)的时候,我却找不到方法了。因为很常时候,我们需要的是给用户看是一种方式,内部值(比如ID等)又是另一种方式。得到显示值可用方法:clb.GetItemText(),但得到内部值的方法没有得到。
所以,我们得换一种绑定的方法,绑定方法确定了取值的方法。这里,运用笨方法能够取得应有的效果:
就是循环遍历数据集,然后转化为你想要的对象(可以暂时定义一个内部对象,要注意一定要重载ToString()方法),加入clb.Items集合。这样,就实现了绑定。一个简单的例子如下(外部类省略):
…………
在需要绑定数据的时候,做如下处理:
foreach (DataRow dr in dt.Rows)//dt为数据源:DataTable类型
{
this.clbUsers.Items.Add(new InnerUser(dr));
}
在取值的时候,就方便了,如下:
InnerUser uChecked = (InnerUser)(this.clbUsers.CheckedItems[0]);//这里我做的是单选,所以索引为0
this.selUserName = uChecked.GetUserName();
this.selUserID = uChecked.GetUserID();
问题解决。下面说一下单选问题。
2、如何只允许单选。CheckListBox有一个叫SelectionMode的属性,如果设置为SelectionMode.One,并没有取得单选的效果。这里要说明一下,就是CheckListBox的单选,并不代表单项的CheckBox的单选。所以,这里没有取得预期的效果。
如何取得单项CheckBox的单选呢,这里需要用程序去实现,如下: