Как вставить элемент ComboBox в ListBox? [винформы]

Вопрос очень прост: как вставить выбранный элемент ComboBox в ListBox с помощью С#?

Я пробовал с этим:

listbox.Items.Add(combobox.SelectedItem);

и некоторые другие перестановки, но он всегда отображает System.Data.DataRowView или что-то в этом роде.

РЕДАКТИРОВАТЬ: проблема была вызвана этим 2

lbList.DisplayMember = "hm";
lbList.ValueMember = "ID";

person Ante    schedule 12.11.2009    source источник
comment
Это должно работать, если вы сначала проверите и исключите значение null.   -  person Henk Holterman    schedule 13.11.2009
comment
Он работает, но отображает строку Systm.Data.DataRowView   -  person Ante    schedule 13.11.2009
comment
Что было бы очень ценной информацией для включения в ваш вопрос :-{   -  person Henk Holterman    schedule 13.11.2009


Ответы (4)


Вам нужно определить «не работает». Что пошло не так?
Этот рабочий пример работает нормально. Чтобы использовать объект (раскомментируйте строки), убедитесь, что вы установили свойство DisplayMember, обратите внимание, что мне не нужно приводить, потому что я использую это свойство.

public partial class Form1 : Form
{
    private void Form1_Load(object sender, EventArgs e)
    {


        List<string> x = new List<string>();
        x.Add("A");
        x.Add("B");
        x.Add("C");
        x.Add("D");
        x.Add("B");


        List<Client> z = new List<Client>();
        z.Add(new Client() { Name = "A" });
        z.Add(new Client() { Name = "B" });
        z.Add(new Client() { Name = "C" });

        comboBox.Items.AddRange(x.ToArray());

        //comboBox.DisplayMember = "Name";
        //listBox.DisplayMember = "Name";
        //comboBox.Items.AddRange(z.ToArray());


    }

    private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        listBox.Items.Add(comboBox.SelectedItem);
    }
}


public class Client
{
    public string Name { get; set; }
}
person slugster    schedule 12.11.2009

Выбранный элемент поля со списком — это DataRowView, а список вызывает DataRowView.ToString(), чтобы решить, что отображать.

Вы также можете

  1. Преобразуйте возвращаемое object значение ComboBox.SelectedItem в DataRowView и добавьте значение столбца, который вы хотите отобразить. (т.е. listbox.Items.Add(((DataRowView)combobox.SelectedItem).FieldName);
  2. Установите значения «DisplayMember» и «ValueMember» списка, чтобы список больше не использовал просто ToString(). Это, вероятно, то, что вы уже сделали для своего поля со списком, иначе оно также отображало бы «System.Data.DataRowView».
person Neil Barnwell    schedule 12.11.2009
comment
Спасибо за помощь, второй решил проблему, но слагстер упомянул об этом первым ... так что я должен дать ему знак Nike - person Ante; 13.11.2009

Вы можете легко добраться до (нетипизированной) строки:

DataRowView drv = (DataRowView) combobox.SelectedItem;
DataRow row = drv.Row;

После этого это зависит от того, какой столбец вам нужен, если вы знаете имя столбца:

object value = row["Column"];
listbox.Items.Add(value);     
person Henk Holterman    schedule 12.11.2009

Анте Я думаю, что проблема связана с comboBox.SelectedItem, это возвращает объект, и в вашем случае этот объект оказывается System.Data.DataRowView. Я думаю, вам нужно указать значение combobox.selectedItem. Я парень VB, поэтому не уверен в синтаксисе C#, но в VB мы бы сделали что-то вроде этого:

DirectCast(combobox.SelectedItem, DataRowView).Foo 

с foo - это то значение, которое вы хотите передать в список.

Другой вариант, который может работать, если вы намерены включить значение поля со списком в список, заключается в использовании:

combobox.selectedvalue 

это возвращает и Object, но на самом деле это объект, который отображается в поле со списком, будь то строка, int и т. д. Не уверен, что это поможет, но мне приходилось делать что-то очень похожее на это в прошлом, и это решение Я придумал.

person ajrawson    schedule 12.11.2009