WinForm之CheckListBox:绑定、取值与单选
来源:互联网 发布:卡雷尔机器人编程 编辑:程序博客网 时间:2024/06/05 07:07
虽然同在.NET框架这个屋檐下,但WinForm与WebForm有些控件的成员和方法还是有不同的。习惯了WebForm的使用,在WinForm中还是有些不习惯。
比如说CheckListBox的数据绑定问题,找了很久,终于综合各路方法,得到以下结论:
1、如何绑定与取值。可以使用clb.DataSource,然后设置DisplayMember和ValueMember;但这种方法绑定之后,显示是正常的,而取值(Value)的时候,我却找不到方法了。因为很常时候,我们需要的是给用户看是一种方式,内部值(比如ID等)又是另一种方式。得到显示值可用方法:clb.GetItemText(),但得到内部值的方法没有得到。
所以,我们得换一种绑定的方法,绑定方法确定了取值的方法。这里,运用笨方法能够取得应有的效果:
就是循环遍历数据集,然后转化为你想要的对象(可以暂时定义一个内部对象,要注意一定要重载ToString()方法),加入clb.Items集合。这样,就实现了绑定。一个简单的例子如下(外部类省略):
…………
在需要绑定数据的时候,做如下处理:
在取值的时候,就方便了,如下:
问题解决。下面说一下单选问题。
2、如何只允许单选。CheckListBox有一个叫SelectionMode的属性,如果设置为SelectionMode.One,并没有取得单选的效果。这里要说明一下,就是CheckListBox的单选,并不代表单项的CheckBox的单选。所以,这里没有取得预期的效果。
如何取得单项CheckBox的单选呢,这里需要用程序去实现,如下:
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的单选呢,这里需要用程序去实现,如下:
/// <summary> /// 单选 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void clbUsers_ItemCheck(object sender, ItemCheckEventArgs e) { if (clbUsers.CheckedItems.Count > 0) { for (int i = 0; i < clbUsers.Items.Count; i++) { if (i != e.Index) { this.clbUsers.SetItemCheckState(i, System.Windows.Forms.CheckState.Unchecked); } } } } /// <summary> /// 内部用户类,用于加载checkedListBox控件,以及返回对象 /// </summary> class InnerUser { private DataRow dr; public InnerUser(DataRow dr) { this.dr = dr; } public override string ToString()//一定要注意重载 { return dr["UserName"].ToString(); } public string GetUserName() { return this.ToString(); } public Decimal GetUserID() { return Decimal.Parse(dr["UserID"].ToString()); } }
- WinForm之CheckListBox:绑定、取值与单选
- winform c# 中获取CheckListBox 值
- C# checkListBox绑定
- CheckListBox数据绑定
- winform里listbox数据绑定,listbox取值问题
- winform里listbox数据绑定,listbox取值问题
- winform里listbox数据绑定,listbox取值问题
- WinForm中CheckListBox控件的应用
- 单选与文本框的动态绑定
- 程序代码段:DataTable排序-checkListBox绑定数据表,获取值,选择等操作。
- ReportViewer之使用,多rdlc与单ReportViewer的绑定
- CheckListBox获取多选的项文本和Value值
- repeater绑定取值
- Struts2与下拉列表绑定的取值问题
- Struts2与下拉列表绑定的取值问题
- Struts2与下拉列表绑定的取值问题
- 水晶报表之winform 数据绑定
- WinForm 中 comboBox控件之数据绑定
- 百度云调试 上传apk到百度安卓虚拟机调试
- 排序算法复杂度
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第15篇)
- 你必须理解的三大软件原则1_DRY
- Centos tomcat 自启动
- WinForm之CheckListBox:绑定、取值与单选
- 数据库中内连接、外连接、全连接
- 关于程序员面试的一点想法
- 《大话数据结构》简体中文版勘误
- HDU-1285-确定比赛名次
- EJB的远程调用与本地调用http://fay19860916.blog.163.com/blog/static/1186491192009819220664/
- ubuntu重启不清除 /tmp 设置
- 关于YAF框架自动加载类的注意事项
- 方向思考