您好,我想动态地将一些值绑定到复选框。
dataset ds = //getting emp values form database;
cbemp.ValueMember = "empid";
cbemp.DisplayMember = "empname";
cbemp.DataSource = ds.Tables["emp"];
工作正常。但我想添加
“选择emplyoee”作为复选框的默认值。
但是我的复选框直接添加了
之类的值 A1
A2
A3
我试过这个
cbemp.Items.Insert(0, "Select emplyoee");
但它不起作用
我该如何添加它?
答案 0 :(得分:8)
使用数据绑定时,无法“手动”添加或删除项目。使用数据绑定实现所需目的的唯一方法是在DataTable
中首先插入具有所需值的行,或者通过代码填充组合框(添加“选择员工”项,然后迭代{ {1}}行添加记录。)
也许这样的事情可行:
DataTable
我没有太多使用数据绑定,所以我可能没有意识到这一点(但我相信社区会在那种情况下指出这一点)。
答案 1 :(得分:4)
在数据源中插入数据是个坏主意。它会促进破坏图层的抽象,如果您在其他地方使用相同的数据源,可能会导致一些问题。
相反,当没有选择项目时,您可以轻松扩展ComboBox以显示“请选择”消息。
我在博客上发表了关于此问题的博客,并在此处提供了代码:http://www.byteauthor.com/2010/08/inner-label-in-combobox/
答案 2 :(得分:0)
我认为您必须将它添加到基础数据表(ds.Tables [“emp”]),以便在您使用数据绑定控件时它在列表中显示为条目。
答案 3 :(得分:0)
当您的控件是数据绑定时,我认为您无法手动添加项目。
要解决此问题,您可以向数据源添加新项目,也可以手动添加项目。
答案 4 :(得分:0)
以上接受的解决方案更好,但有时可能会派上用场的一个技巧是将“假”记录联合到返回数据绑定记录集的SQL。在这种情况下,例如:
select 0 as empid, 'Please select' as empname
union
select empid, empname from emp
order by empid
当然,您必须保护数据库不会意外地写回“0”记录(例如,如果用户没有做出选择),但这并不太难。
答案 5 :(得分:0)
如果ComboBoxStyle设置为DropDownList(因此用户无法编辑组合框),那么确保用户选择项目的最简单方法是设置selectedIndex = -1,您可以随时在组合框上添加“请选择”等。< / p>
答案 6 :(得分:0)
在我的情况下(databinded组合框)我解决了这样的问题。当然最好的方法是Kevin Coulombe。
ComboBox.SelectedIndex = -1;
ComboBox.Text = "Please, select something";
使用一些代码,您可以轻松管理此方案。