2009-08-31 13 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

0

データバインドされたコントロールを使用しているときに、それがリストのエントリとして表示されるように、基礎となるデータテーブル(ds.Tables ["emp"])に追加する必要があると思います。

0

あなたのコントロールがデータバインドされている場合、手動で項目を追加することはできません。

この問題を回避するには、データソースに新しいアイテムを追加するか、手動でアイテムを追加することができます。

4

データソースにデータを挿入することは悪い考えです。レイヤーの抽象化の崩壊を促進し、別の場所で同じデータソースを使用している場合は、いくつかの問題が発生する可能性があります。

代わりに、アイテムを選択していないときに「選択してください」というメッセージが表示されるように、ComboBoxを簡単に拡張することができます。

私はこの問題についてブログやここにコードを提供:http://www.byteauthor.com/2010/08/inner-label-in-combobox/

0

を上記受け入れソリューションは良いですが、便利になるかもしれない1つのトリックは時々連合に戻っている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コンボボックス)、私はこのような問題を解決しました。もちろん、最良の方法はKevin Coulombeです。

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

コードのほんの少しで、このシナリオを簡単に管理できます。

関連する問題