2009-08-31 153 views
5

嗨在这里,我想动态地将一些值绑定到复选框。组合框默认值winforms c#

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"); 

,但它不工作

如何添加呢?

回答

8

当您使用数据绑定时,您不能“手动”添加或删除项目。实现数据绑定所需的唯一方法是首先在DataTable中插入一行,并使用所需的值,或者通过代码填充组合框(添加“选择员工”项,然后迭代DataTable行以添加记录)。

也许这样的事情可以工作:

// create new row for "Select employee" 
DataRow row = ds.Tables["emp"].NewRow(); 
row["empid"] = -1; 
row["empname"] = "Select employee"; 
// insert the row at the top of the table 
ds.Tables["emp"].Rows.InsertAt(row, 0); 
// do the databinding 
cbemp.ValueMember = "empid"; 
cbemp.DisplayMember = "empname"; 
cbemp.DataSource = ds.Tables["emp"]; 

我不使用数据绑定多,所以有可能是缺点,这个,我不知道(但我相信社会会指出这一点在这种情况下)。

+0

谢谢你解决了 – Nagu 2009-08-31 12:21:46

0

我想你不得不将它添加到底层数据表(ds.Tables [“emp”]),因为它在使用数据绑定控件时显示为列表中的条目。

0

当您的控件数据绑定时,您不能手动添加项目,我认为。

要解决此问题,您可以将新项目添加到数据源,也可以手动添加项目。

4

在您的数据源中插入数据是一个坏主意。它会促进打破你的图层的抽象,如果你在其他地方使用相同的数据源,可能会导致一些问题。

取而代之的是,您可以轻松扩展组合框,以便在未选择任何项目时显示“请选择”消息。

我的博客上讲述这个问题,并提供此代码:http://www.byteauthor.com/2010/08/inner-label-in-combobox/

0

上述接受的解决方案是更好的,但是一个伎俩,可能会派上用场,有时是联盟的一个“假”的记录到SQL被返回数据绑定的记录集。在这种情况下,像:

select 0 as empid, 'Please select' as empname 
union 
select empid, empname from emp 
order by empid 

当然,你必须保护数据库意外写“0”记录后面(例如,如果用户不进行选择),而不是太难。

0

如果ComboBoxStyle设置为DropDownList(因此用户无法编辑组合框),那么确保用户选择一个项目的最简单方法是设置selectedIndex = -1,您可以随时在组合框上方添加“请选择”等。

0

在我的情况下(databinded combobox)我解决了这个问题。当然,最好的方法是Kevin Coulombe。

ComboBox.SelectedIndex = -1; 
ComboBox.Text = "Please, select something"; 

用一点代码你可以很容易地管理这个场景。