Как вставить элемент ComboBox в ListBox? [WinForms] - PullRequest
0 голосов
/ 13 ноября 2009

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

Я пытался с этим:

listbox.Items.Add(combobox.SelectedItem);

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

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

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

Ответы [ 4 ]

4 голосов
/ 13 ноября 2009

Вы должны определить «не работает». Что пошло не так?
Это работает пример работает отлично. Чтобы использовать объект (раскомментировать строки), убедитесь, что вы установили свойство 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; }
}
1 голос
/ 13 ноября 2009

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

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

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

object value = row["Column"];
listbox.Items.Add(value);     
1 голос
/ 13 ноября 2009

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

Вы можете либо

  1. Приведите возвращаемое значение object от ComboBox.SelectedItem к DataRowView и добавьте значение столбца, который вы хотите отобразить. (т.е. listbox.Items.Add(((DataRowView)combobox.SelectedItem).FieldName);
  2. Установите значения «DisplayMember» и «ValueMember» для списка, чтобы в списке больше просто не использовался ToString(). Вероятно, это то, что вы уже сделали для своего comboxbox, иначе также будет отображаться «System.Data.DataRowView».
1 голос
/ 13 ноября 2009

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

DirectCast(combobox.SelectedItem, DataRowView).Foo 

, где foo является тем значением, которое вы хотите передать в список.

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

combobox.selectedvalue 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...