如何将ComboBox项插入ListBox? [的WinForms]

时间:2009-11-12 22:57:03

标签: c# winforms combobox listbox

问题很简单, 如何使用c#?

将ComboBox选中的项插入ListBox

我试过这个:

listbox.Items.Add(combobox.SelectedItem);

和其他一些排列,但它总是显示System.Data.DataRowView或类似的东西..

编辑:roblem受到了这个2

的影响
lbList.DisplayMember = "hm";
lbList.ValueMember = "ID";

4 个答案:

答案 0 :(得分: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; }
}

答案 1 :(得分:1)

Ante我认为问题来自comboBox.SelectedItem,这会返回一个Object,在您的情况下,Object恰好是System.Data.DataRowView。我认为你需要将combobox.selectedItem转换为值。我是一个VB人,因此不确定C#的语法,但在VB中我们会做这样的事情:

DirectCast(combobox.SelectedItem, DataRowView).Foo 

foo是您希望传递给列表框的有价值的东西。

如果您打算在列表框中包含组合框的值,则另一个可能有用的选项是使用:

combobox.selectedvalue 

这会返回和对象,但它实际上是在组合框天气中显示的对象,它是一个字符串,int等。不确定这是否有帮助,但我必须做一些与此类似的事情,这就是我提出的解决方案。

答案 2 :(得分:1)

组合框的选定项目是DataRowView,列表框正在调用DataRowView.ToString()来计算要显示的内容。

你可以

  1. object的{​​{1}}返回值转换为ComboBox.SelectedItem,并添加要显示的列的值。 (即DataRowView
  2. 设置列表框的“DisplayMember”和“ValueMember”值,因此列表框不再仅使用listbox.Items.Add(((DataRowView)combobox.SelectedItem).FieldName);。这可能是您已经为您的comboxbox所做的事情,否则它也会显示“System.Data.DataRowView”。

答案 3 :(得分:1)

您可以轻松地进入(无类型)行:

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

之后,如果您知道列名称,则取决于您需要的列:

object value = row["Column"];
listbox.Items.Add(value);