1

コンボボックスから値を取得できません。私の目的は、コンボボックスでアイテムを選択すると、txtadresテキストボックスに顧客の住所が表示されることです。

コードをテストすると、null 参照例外が発生します。

私も試しcomboBox1.SelectedItem.ToString();ましたが、それもうまくいきませんでした。comboBox1.Text表示メンバーと値メンバーが違うので使えません。表示メンバーは顧客名で、値メンバーは顧客コードです。

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)        
{           
    string cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Database1.accdb";           
    string cc = comboBox1.SelectedValue.ToString();          
    string sql = "SELECT * FROM Customers WHERE customercode = '" + cc + "'";

    using (OleDbConnection con = new OleDbConnection(cs))  
    {

        if (cc == "")
        {
            txtadres.Text = "No address found!";
        }
        else
        {
            OleDbCommand com = new OleDbCommand(sql, con);
            con.Open();
            OleDbDataReader DB = com.ExecuteReader();
            if (!DB.Read())
                return;

            txtadres.Text = DB["Adress"].ToString();
            con.Close();
        }
    }
}

更新私は解決策を見つけました、これは私にとってはうまくいきました:string cc = Convert.ToString(comboBox1.SelectedValue);

4

3 に答える 3

1

SelectedItemコンボボックスの は であり、この MSDN ページListBoxItemで説明されています。

この MSDN ページには、ListBoxItem のメソッドとプロパティに関する詳細情報があります。

要するに、SelectedItem のテキストにアクセスするには、次のようなコードを使用します。

string itemText = (comboBox1.SelectedItem.Content).ToString();

ComboBox アイテムが単なるテキストではない場合、これは選択されたオブジェクトを返します (クラスが何であれ)。それが単なる文字列の場合、これによりその文字列が取得されます。

ただし、これSelectedItemは null になる可能性があるため、使用する前に null チェックを行う必要があります。

于 2013-04-03T15:39:14.513 に答える
0

正直なところ、この問題をどこから始めればよいかわかりませんが、ここでの最初の大きな問題は、インデックスが変更されるたびにデータベースに接続することであり、それは基本的なノーノーです。

データベース クエリの内容を DataTable オブジェクトに入力するには、Data Adapter の使用を検討する必要があります。その後、コンボ ボックスのデータソースを DataTable に設定できます。

ここから、コンボ ボックスに Display & Value メンバーを割り当て、データベースを呼び出すことなく、Index changed で選択した値を取得できます。

それは本当にあなたの解決策を再考することの問題です.

于 2013-04-03T15:39:38.160 に答える
0

私はコンボボックスで同様の不満を抱いてきました。これはおそらく最善ではありませんが、これは私がやったことです:

((ComboBoxItem)ComboBox.SelectedItem).CustomerCode;

ComboBoxItem キャストを、コンボボックスを埋めたオブジェクトに置き換えます。もちろん、これは、アクセスしようとしている項目をコンボ ボックスに入力した場合にのみ機能します。

于 2013-04-03T15:40:49.407 に答える