web-dev-qa-db-ja.com

コンボボックスから選択した値を設定する方法は?

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;     

しかし、コンボボックスは値が選択されていません。どうやってやるの?

38
thinzar

これを試してください。

cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);

お役に立てば幸いです。 :)

46
sailhenz

数値(内部)とテキスト(可視)の関係を手動で設定しようとするデータベーススタイルのComboBoxを実行するには、次のことが必要であることがわかりました。

  1. リストにアイテムを保存します(文字列、文字列を除く-整数、文字列が必要です)
  2. リストのDataSourceプロパティ(良い)
  3. DataMember、DataValue(いいですね)
  4. デフォルト値をロード(良い)
  5. データベースから値を入力します(質問)
  6. データベースに戻す値を取得します(次の質問)

まず最初に。 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の一部であり、データバインディングを手動で制御し、コードエラーを減らします。

なぜこんなに遅く答えたのですか?私はこれに苦労していました。これを行う方法についての良い情報がウェブ上にないようです。私はそれを理解し、私はナイスになり、他の人が見ることができるように投稿すると思いました。

15
CharlesW

Windowsアプリケーションでは、このように使用します

 DDLChangeImpact.SelectedIndex = DDLChangeImpact.FindStringExact(ds.Tables[0].Rows[0]["tmchgimp"].ToString());
 DDLRequestType.SelectedIndex = DDLRequestType.FindStringExact(ds.Tables[0].Rows[0]["rmtype"].ToString());
4
subbulakshmi

以下はあなたのケースで動作します。

cmbEmployeeStatus.SelectedItem =employee.employmentstatus;

SelectedItemプロパティをオブジェクトに設定すると、ComboBoxはそのオブジェクトをリストで現在選択されているものにしようとします。リストにオブジェクトが見つかった場合、ComboBoxの編集部分に表示され、SelectedIndexプロパティが対応するインデックスに設定されます。オブジェクトがリストに存在しない場合、SelectedIndexプロパティは現在の値のままになります。

編集

選択したアイテムを次のように設定するのはあなたの場合は間違っていると思います。

cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;

以下のように

var toBeSet = new KeyValuePair<string, string>("1", "Contract");
cmbEmployeeStatus.SelectedItem = toBeSet;

正しい名前と値のペアを割り当てる必要があります。

3
CharithJ
cmbEmployeeStatus.Text = "text"
2
dpp

コンボボックスで、それぞれの従業員のステータスにSelectedIndexプロパティを使用します。

2
Alban

データベースに保存するときに何かが正しくないと思われます。あなたの手順を次のように理解していますか?

  1. 投入してバインドする
  2. ユーザーがアイテムを選択し、ヒットして保存します。その後、データベースに保存します
  3. 今、あなたが別のアイテムを選択した場合、それは選択しませんか?

特に保存時に、より多くのコードを取得しましたか?コード内のどこでbindinglistを初期化および設定していますか

1
Rached N.

これを試して

combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"

これを試して:

KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;
0
simi

可能な解決策:

cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
0
Jahir

ComboBoxで値を設定するには

cmbEmployeeStatus.Text="Something";
0
Rasel