C#windowsフォームでcomboboxを使用します。以下のようにアイテムリストをバインドしました。
var employmentStatus = new BindingList<KeyValuePair<string, string>>();
employmentStatus.Add(new KeyValuePair<string, string>("0", "[Select Status]"));
employmentStatus.Add(new KeyValuePair<string, string>("1", "Contract"));
employmentStatus.Add(new KeyValuePair<string, string>("2", "Part Time"));
employmentStatus.Add(new KeyValuePair<string, string>("3", "Permanent"));
employmentStatus.Add(new KeyValuePair<string, string>("4", "Probation"));
employmentStatus.Add(new KeyValuePair<string, string>("5", "Other"));
cmbEmployeeStatus.DataSource = employmentStatus;
cmbEmployeeStatus.ValueMember = "Key";
cmbEmployeeStatus.DisplayMember = "Value";
cmbEmployeeStatus.SelectedIndex = 0;
選択した値をデータベース(例:1または2)に保存します。次に、次のようなデータベースアイテムから選択した値を設定します。
cmbEmployeeStatus.SelectedValue =employee.employmentstatus;
しかし、コンボボックスは値が選択されていません。どうやってやるの?
これを試してください。
cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);
お役に立てば幸いです。 :)
数値(内部)とテキスト(可視)の関係を手動で設定しようとするデータベーススタイルのComboBoxを実行するには、次のことが必要であることがわかりました。
まず最初に。 KeyValuePairを次のように変更します。
(0、 "選択")(1、 "オプション1")
さて、SQL「従業員からempstatusを選択してください」を実行して整数を取得するとき、時間を無駄にせずにコンボボックスを設定する必要があります。
単純:*** SelectedVALUE-not Item ****
cmbEmployeeStatus.SelectedValue = 3; //or
cmbEmployeeStatus.SelectedValue = intResultFromQuery;
これは、コンボボックスにコード値を手動でロードした場合でも、コンボボックスをクエリからロードした場合でも機能します。
外部キーが整数である場合(私がやっていることはすべてそうです)、人生は簡単です。ユーザーがcomboBoxに変更を加えた後、データベースに保存する値はSelectedValueです。 (必要に応じてintにキャストします。)
ComboBoxをデータベースの値に設定するコードは次のとおりです。
if (t is DBInt) //Typical for ComboBox stuff
{
cb.SelectedValue = ((DBInt)t).value;
}
取得するには:
((DBInt)t).value = (int) cb.SelectedValue;
DBIntはIntegerのラッパーですが、これはORMの一部であり、データバインディングを手動で制御し、コードエラーを減らします。
なぜこんなに遅く答えたのですか?私はこれに苦労していました。これを行う方法についての良い情報がウェブ上にないようです。私はそれを理解し、私はナイスになり、他の人が見ることができるように投稿すると思いました。
Windowsアプリケーションでは、このように使用します
DDLChangeImpact.SelectedIndex = DDLChangeImpact.FindStringExact(ds.Tables[0].Rows[0]["tmchgimp"].ToString());
DDLRequestType.SelectedIndex = DDLRequestType.FindStringExact(ds.Tables[0].Rows[0]["rmtype"].ToString());
以下はあなたのケースで動作します。
cmbEmployeeStatus.SelectedItem =employee.employmentstatus;
SelectedItemプロパティをオブジェクトに設定すると、ComboBoxはそのオブジェクトをリストで現在選択されているものにしようとします。リストにオブジェクトが見つかった場合、ComboBoxの編集部分に表示され、SelectedIndexプロパティが対応するインデックスに設定されます。オブジェクトがリストに存在しない場合、SelectedIndexプロパティは現在の値のままになります。
編集
選択したアイテムを次のように設定するのはあなたの場合は間違っていると思います。
cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;
以下のように
var toBeSet = new KeyValuePair<string, string>("1", "Contract");
cmbEmployeeStatus.SelectedItem = toBeSet;
正しい名前と値のペアを割り当てる必要があります。
cmbEmployeeStatus.Text = "text"
コンボボックスで、それぞれの従業員のステータスにSelectedIndexプロパティを使用します。
データベースに保存するときに何かが正しくないと思われます。あなたの手順を次のように理解していますか?
特に保存時に、より多くのコードを取得しましたか?コード内のどこでbindinglistを初期化および設定していますか
これを試して
combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"
これを試して:
KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;
可能な解決策:
cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
ComboBoxで値を設定するには
cmbEmployeeStatus.Text="Something";