Передача текста и значения в ComboBox

1

Я попытался передать свой combobox текст, а затем значение. Но я не могу получить значение.

DropDownList1.Items.Add(new ListItem("abc", 23));
DropDownList1.Items.Add(new ListItem("def", 56));

Затем я попытаюсь получить значение, когда я выбрал любой из них в Combobox

 string text = DropDownList1.SelectedItem.ToString();
 string value = DropDownList1.SelectedValue.ToString();

 this.label5.Text = text + " with value: " + value;

Это приводит к сбою со следующим кодом ошибки: "Необработанное исключение типа" System.NullReferenceException "произошло в WindowsFormsApplication1.exe

Дополнительная информация: Ссылка на объект не установлена в экземпляр объекта. "

Если я просто использую переменную "текст", все в порядке.

Что мне не хватает?

EDIT: Я знаю, что я получаю null, и это поможет мне не сбой, но почему значение не передается в/из ComboBox? Заранее спасибо

РЕШЕНИЕ: Так мне удалось это решить.

        var source = new Dictionary<string, int>();
        source.Add("College", 100);
        source.Add("T-shirt", 54);
        DropDownList1.DataSource = source.ToList();
        DropDownList1.DisplayMember = "Key";
        DropDownList1.ValueMember = "Value";

А потом

    private void button1_Click_1(object sender, EventArgs e)
    {
        var selectedItem = DropDownList1.Text;
        if (DropDownList1.SelectedValue == null)
        {
            return;
        }
        string value = DropDownList1.SelectedValue.ToString();
        //[etc…]

        this.label5.Text = "Cloth:" + selectedItem + " costs " + value;
    }

Надеюсь, это поможет кому угодно.

Спасибо всем за помощь!

Теги:
combobox
listitem

6 ответов

0

Вы должны добавить чек для проверки я = null следующим образом:

        label1.text = DropDownList1.selectedItem.Value != null ? DropDownList1.selectedItem.Text + " with value: " + DropDownList1.selectedItem.Value : label1.text;

Это должно сделать трюк, который он проверяет, если i! = Null;

вы получаете ошибку, потому что вы не можете пустую переменную с +

0

Возможно, вам придется привязать эти данные, прежде чем использовать их, попробуйте:

myDropdown.DataBind()

Как только вы добавите свои предметы, и это может решить проблему, я думаю, вы можете найти тонны и тонны уроков об этом, просто Google

  • 2
    Вам не нужно DataBind, если вы добавляете элементы напрямую.
  • 0
    Привет, я думаю, что вы правы, мне нужна DataBind. Но когда я использую его, я получаю сообщение об ошибке: Ошибка 1 «System.Windows.Forms.ComboBox» не содержит определения для «DataTextField» и нет метода расширения «DataTextField», принимающего первый аргумент типа «System.Windows.Forms.ComboBox». 'может быть найдено (вам не хватает директивы using или ссылки на сборку?) WindowsFormsApplication1 \ Form1.cs 48 27 WindowsFormsApplication1 Есть идеи?
0

Поскольку вы не указали, на какой строке выбрано исключение, так что это немного выстрел в темноте. Однако:

string value = DropDownList1.SelectedValue.ToString();

DropDownList1.SelectedValue может быть пустым, и в этом случае попытка вызвать ToString() на нем вызовет исключение NullReferenceException. Пытаться:

if (DropDownList1.SelectedValue == null)
   return;

var value = DropDownList1.SelectedValue;
this.label5.Text = String.Format("{0} with value: {1}", text, value);
//[etc…]

Обновление:

Предполагая, что ваш combobox не привязан к базе данных, поскольку вы добавляете элементы в память, вам нужно также установить значение по умолчанию. Вам нужно будет найти индекс объекта в коллекции Items в вашей форме, а затем установить свойство SelectedIndex в соответствующий индекс.

DropDownList1.Items.Add(new ListItem("abc", 23));
DropDownList1.Items.Add(new ListItem("def", 56));
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf("abc");

Имейте в виду, что функция IndexOf может IndexOf ArgumentException если элемент не находится в коллекции.

  • 0
    Спасибо! Да, SelectedValue является нулевым. Почему это?
  • 0
    Возможной причиной может быть то, что вы используете DropDownStyle DropDown и вводите в ComboBox. Я предполагаю, потому что введенное значение больше не является одним из элементов в ComboBox . В этом случае установите для DropDownStyle значение DropDownList , предполагая, что пользователь должен выбрать существующее значение.
Показать ещё 4 комментария
0

Возможно, вам придется привязать эти данные, прежде чем использовать их, попробуйте:

myDropdown.DataBind()

Как только вы добавите свои предметы, и это может решить проблему, я думаю, вы можете найти тонны и тонны уроков об этом, просто Google

Я думаю, что не может быть выбран ни один элемент, и вы вызываете.ToString() в нулевом значении, я не могу определить его без дополнительного контекста, как вы пытаетесь получить выбранное значение?

  • 0
    Привет, я думаю, что вы правы, мне нужна DataBind. Но когда я использую его, я получаю сообщение об ошибке: Ошибка 1 «System.Windows.Forms.ComboBox» не содержит определения для «DataTextField» и нет метода расширения «DataTextField», принимающего первый аргумент типа «System.Windows.Forms.ComboBox». 'может быть найдено (вам не хватает директивы using или ссылки на сборку?) WindowsFormsApplication1 \ Form1.cs 48 27 WindowsFormsApplication1 Есть идеи?
  • 0
    Не могли бы вы опубликовать ваш код?
Показать ещё 1 комментарий
0
// Check whether your combobox is selected or not 

 if (DropDownList1.SelectedIndex != -1)
    {
       string text = DropDownList1.SelectedItem.ToString();
       string value = DropDownList1.SelectedValue.ToString();
       this.label5.Text = text + " with value: " + value;
    }
    else
    {
    // message to select option
    }

Пожалуйста, note- У нас есть ComboBox в Windows Application и Dropdownlist в Asp.net.

0

Я сделал это довольно давно. Но я думаю, вам нужно использовать его так:

var selectedItem = DropDownList1.SelectedItem;
if (selectedItem != null)
{
    string text = selectedItem.Text;
    string value = selectedItem.Value;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню