当前位置: 首页 > 编程语言 > C#

checkedlistbox为什么没有数据源?如何绑定到值列表?分享

时间:2023-04-10 22:51:06 C#

为什么checkedlistbox没有数据源?如何绑定到值列表?我正在开发一个Winform,我需要一个checkedlistbox。我将值存储在具有List属性的对象中:publicstaticclassFields{publicstaticIListFieldList{get;放;}staticFields(){...//populateFieldList}}现在我希望我的CheckedListBox使用字段。FieldList作为数据源。网上搜索后发现需要在myForm_Load中设置//mycheckedListBox.DataSource=Fields.FieldList;但是myCheckedListBox没有DataSource属性。我在这里错过了什么吗?根据文档,它应该具有此属性...http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.datasource(VS.90).aspx但是,在我之前的项目中我也遇到了同样的问题,并使用这篇CodeProject文章在我需要此功能的项目中编写了一个解决方案。研究了一下,我确实发现了这个:http://connect.microsoft.com/VisualStudio/feedback/details/115199/checkedlistbox-datasource-displaymember-valuemember-are-hidden编辑:上面的链接不再有效,但是以下例外来自曾经驻留的文章。Microsoft发布于2005年5月30日上午10:28感谢您的反馈,但这是设计使然。我们不支持CheckedListBox控件上的数据绑定。这些属性继承自其基类,无法移除,因此我们将它们隐藏在属性网格和IntelliSense中。这解释了为什么该属性存在,但未显示在Intellisense中。这篇博文也值得一读:http://waxtadpole.wordpress.com/2009/10/12/assigning-custom-class-to-checkedlistbox-datasource/这就是我将列表的用户对象绑定到CheckedListBox的方式。((ListBox)myCheckedListBox).DataSource=listOfUsers;((ListBox)myCheckedListBox).DisplayMember="全名";((ListBox)myCheckedListBox).ValueMember="UserID";当然不推荐这样做,因为文档告诉我们隐藏这个属性。上面的代码有效,但我注意到VisualStudio2012中的一些副作用,例如:渲染选中标记的延迟:单击所需项目后,渲染“选中”标记时会出现令人讨厌的延迟。在我的例子中,CheckOnClick属性为True,CausesValidation为False。我个人使用绑定到DataTable的DataGridView,该DataTable具有布尔字段以及用于显示值的字段。如果您隐藏列标题和行标题,那么您将获得与CheckedListBox提供的内容非常接近的内容。这可以通过遍历可能的数据源并一次添加一个项目来解决。例如:这会导致异常:myCheckedListBox.DataSource=myStringList;可以修改为:foreach(stringmyStringinmyStringList){myCheckedListBox.Items.Add(myString);我知道这很旧;对于仍然有相同要求的任何人为了我的利益,这对我有用。请注意,我没有使用DisplayMember或ValueMember属性,因为它似乎令人气馁(请参阅上面的@DavidStratton的帖子)。//参考资料//https://social.msdn.microsoft.com/Forums/vstudio/en-US/0e0da0c9-299e-46d0-b8b0-4ccdda15894c/how-to-assign-values-to-checkedlistbox-items-and-sum-these-values?forum=csharpgeneral使用Microsoft.Practices.EnterpriseLibrary.Data;使用System.Collections.Generic;使用系统数据;使用System.Linq;使用System.Windows.Forms;namespaceMyApp{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();DatabaseProviderFactoryfactory=newDatabaseProviderFactory();数据库db=factory.Create("MyConnString");DataTabledt=db.ExecuteDataSet(CommandType.StoredProcedure,"ProcGetCustomers").Tables[0];varcustlist=new列表>();对于(inti=0;i().ToArray());}publicclassCheckBoxItem{publicCheckBoxItem(KdisplayValue,VhiddenValue){DisplayValue=displayValue;隐藏值=隐藏值;}publicKDisplayValue{得到;私有集;}publicVHiddenValue{得到;私有集;}公共覆盖字符串ToS??tring(){返回DisplayValue==null?"":DisplayValue.ToString();}}publicstaticCheckBoxItemCreate(KdisplayValue,VhiddenValue){returnnewCheckBoxItem(displayValue,hiddenValue);我将ToString()方法传递给似乎可以解决问题的名称:publicstaticclassFields{publicstringMyDisplayMember{get;放;}publicoverridestringToString(){returnMyDisplayMember;}}并转换为带对象的arraylist:C#学习教程:为什么checkedlistbox没有数据源?如何绑定到值列表?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——{mycheckedlistbox.Items.AddRange(MyList.ToArray());}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: