1

メインフォームを開いたときに呼び出されるメソッドがあります

private void populateComboBoxes()
{
    SqlCeDataAdapter breakfastAdapter = new SqlCeDataAdapter("SELECT DISTINCT recipeName FROM Recipe WHERE Category = 'breakfast' ", databaseConnection);
    SqlCeDataAdapter lunchAdapter = new SqlCeDataAdapter("SELECT DISTINCT recipeName FROM Recipe WHERE Category = 'lunch' ", databaseConnection);
    breakfastAdapter.Fill(breakfastDS, "Recipe");
    lunchAdapter.Fill(lunchDS, "Recipe");
    cmbBox1.DisplayMember = "recipeName";
    cmbBox1.ValueMember = "recipeName";
    cmbBox1.DataSource = breakfastDS.Tables["Recipe"];
    cmbBox2.DataSource = lunchDS.Tables["Recipe"];            
    cmbBox2.DisplayMember = "recipeName";
    cmbBox2.ValueMember = "recipeName";                      
}

これは基本的に、SELECTステートメントに基づいて2つのコンボボックスにデータを入力します。このメソッドがヒットcmbBox1.DataSource = breakfastDS.Tables["Recipe"]すると、実行を停止し、次のメソッドに移動します。

private void cmbBox1_SelectedIndexChanged(object sender, EventArgs e)
{         
    rtbPicture.Visible = false;
    string qry = "";
    qry = "SELECT DISTINCT ingredientName FROM Recipe WHERE recipeName = " + cmbBox1.SelectedItem.ToString();

    SqlCeCommand com = new SqlCeCommand(qry, databaseConnection);
    com.CommandText = qry;
    rtbRecipe.Text = com.ExecuteScalar().ToString();
}

このメソッドはselectステートメントを実行し、その情報をに入れることになっていますrichtextboxが、何らかの理由cmbBox1で設定されていません。私の理解では、最初comboboxの方法では、前の方法で表示メンバーと値メンバーがすでに設定されていました。ただし、に到達すると、の実際の文字列の代わりにcmbBox1.SelectedItem.ToString()戻ります。文字列の代わりになぜそれが私に与えているのかわかりません。System.Data.DataRowViewcomboboxSystem.Data.DataRowView

4

2 に答える 2

3

を使用してcmbBox1.SelectedItem.ToString()います。SelectedValueおそらく代わりに使用する必要があります:

qry = "SELECT DISTINCT ingredientName FROM Recipe WHERE recipeName = " + cmbBox1.SelectedValue.ToString();

SelectedItem実際のComboBoxアイテム(この場合はa DataRowView)を取得しますが、のSelectedValueとして指定したプロパティの値を取得します。ValueMemberComboBox

于 2013-03-25T21:55:37.350 に答える
0

cmbBox2.DisplayMember = "recipeName";

cmbBox2.DataSource = launchDS.Tables ["Recipe"];

cmbBox2.ValueMember = "recipeName";

于 2013-09-28T13:18:14.843 に答える