Как привязать источник данных к ComboBox?

Итак, в настоящее время у меня есть два поля со списком. Одно существо производит другое существо модели. Мой sql-запрос выглядит так: «Выбрать отдельную модель из листа 1, где (Manufacture = @Manufacture)», это работает, когда я его выполняю и если я должен заполнить таблицу данных. Но если я попытаюсь поместить это в поле со списком, я получу System.data.d...... и т. д. для моего выбора. Как я могу просто показать значения вместо всего этого. Что я делаю неправильно?

 private void ManuComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        string manu = comboBox3.Text;
        string conStr = "Data Source=CA-INVDEV\\RISEDB01;Initial Catalog=RISEDB01;    Integrated Security=True";
        string sqlcmd = "SELECT DISTINCT Model FROM Sheet1 WHERE (Manufacture =@Manufacture)";
        using (SqlConnection conn = new SqlConnection(conStr))
        {

            SqlCommand cmd = new SqlCommand(sqlcmd, conn);

            cmd.Parameters.AddWithValue("@Manufacture", manu);

            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                dr.Close();
                SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);                    
                DataTable table = new DataTable();
                table.Locale = System.Globalization.CultureInfo.InvariantCulture;
                dataAdapter.Fill(table);
                bindingSource3.DataSource = table;                   
                ModelComboBox.DataSource = bindingSource3;

            }
        }
    }

person Murda Ralph    schedule 18.07.2013    source источник
comment
Вы пытались установить DisplayMember?   -  person Sayse    schedule 18.07.2013
comment
Я нет. Попробую это.   -  person Murda Ralph    schedule 18.07.2013
comment
Мне не повезло. Как бы вы порекомендовали мне подойти?   -  person Murda Ralph    schedule 18.07.2013
comment
соединение.Открыть(); и соединение.Закрыть(); не требуется, так как вы используете.   -  person sean717    schedule 18.07.2013
comment
спасибо Шон. Я все еще кальмар :)   -  person Murda Ralph    schedule 18.07.2013


Ответы (3)


Можешь попробовать?

        using (SqlConnection conn = new SqlConnection(conStr))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand(sqlcmd, conn);

            cmd.Parameters.AddWithValue("@Manufacture", manu);

            SqlDataReader dr = cmd.ExecuteReader();

            IList<string> modelList = new List<string>()
            while (dr.Read())
            {
                modelList.add(dr[0].ToString());
            }

            ModelComboBox.DataSource = modelList;
        }
person sean717    schedule 18.07.2013
comment
Также я заметил, что переменная manu нигде не присваивается - person sean717; 18.07.2013
comment
собираюсь попробовать это сейчас - person Murda Ralph; 18.07.2013
comment
работал!. Ты да босс человек! Сегодня узнал кое-что новое Спасибо :) - person Murda Ralph; 19.07.2013
comment
Рад узнать, что это сработало. Кроме того, имейте в виду, что IDataReader быстрее читает базу данных, чем DataAdapter. - person sean717; 19.07.2013
comment
О, это? Я имею в виду, что моя БД состоит только из двух таблиц размером не более пары мегабайт. Но спасибо за информацию. - person Murda Ralph; 19.07.2013

Если вы установили элемент отображения, например:

ModelComboBox.DataSource = bindingSource3;
ModelComboBox.DisplayMember = "ColumnName";

И он по-прежнему показывает забавные значения, какие именно значения он показывает?

  • Обратите внимание, что в панели инструментов вам, возможно, придется также сделать:

    ModelComboBox.BindingContext = this.BindingContext;

вот ссылка

person Ted    schedule 18.07.2013

Попробуйте добавить

ComboBox1.ItemsSource = bindingSource3

если это ваш ответ, то отметьте его как ответ

person Ayman Afzal    schedule 18.07.2013