2009-08-31 106 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"; 

用一點代碼你可以很容易地管理這個場景。