C# 如何将组合框项插入列表框?[winforms]

C# 如何将组合框项插入列表框?[winforms],c#,winforms,combobox,listbox,C#,Winforms,Combobox,Listbox,问题很简单,, 如何使用c#将组合框所选项目插入列表框 我试过这样做: listbox.Items.Add(combobox.SelectedItem); 和其他一些排列,但它总是显示System.Data.DataRowView或类似的内容 编辑:这个问题是由这个2 lbList.DisplayMember = "hm"; lbList.ValueMember = "ID"; Ante我认为问题来自comboBox.SelectedItem,它返回一个对象,在您的例子中,该对象恰好是Sys

问题很简单,, 如何使用c#将组合框所选项目插入列表框

我试过这样做:

listbox.Items.Add(combobox.SelectedItem);
和其他一些排列,但它总是显示System.Data.DataRowView或类似的内容

编辑:这个问题是由这个2

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

Ante我认为问题来自comboBox.SelectedItem,它返回一个对象,在您的例子中,该对象恰好是System.Data.DataRowView。我认为您需要将combobox.selectedItem转换为一个值。我是一个VB爱好者,所以不确定C的语法,但在VB中,我们会这样做:

DirectCast(combobox.SelectedItem, DataRowView).Foo 
foo是您想要传递给列表框的任何值

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

combobox.selectedvalue 

这将返回和对象,但实际上它是组合框中显示的对象,不管它是字符串、int等。不确定这是否有帮助,但我过去不得不做一些非常类似的事情,这就是我提出的解决方案。

组合框的选定项是DataRowView,列表框正在调用
DataRowView.ToString()
,以确定要显示的内容

你也可以

  • 对象
    转换为
    组合框的返回值。选择editem
    数据行视图
    ,然后添加要显示的列的值。(即
    listbox.Items.Add(((DataRowView)combobox.SelectedItem.FieldName);
  • 设置listbox的“DisplayMember”和“ValueMember”值,这样listbox就不再只使用
    ToString()
    。这可能是您已经为comboxbox做过的事情,否则它也会显示“System.Data.DataRowView”
  • 您需要定义“不起作用”。出了什么问题?
    这个例子很好用。要使用对象(取消对行的注释),请确保设置了
    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:表单
    {
    私有void Form1\u加载(对象发送方、事件参数e)
    {
    列表x=新列表();
    x、 添加(“A”);
    x、 添加(“B”);
    x、 添加(“C”);
    x、 添加(“D”);
    x、 添加(“B”);
    列表z=新列表();
    z、 添加(新客户端(){Name=“A”});
    z、 添加(新客户端(){Name=“B”});
    z、 添加(新客户端(){Name=“C”});
    comboBox.Items.AddRange(x.ToArray());
    //comboBox.DisplayMember=“Name”;
    //listBox.DisplayMember=“Name”;
    //comboBox.Items.AddRange(z.ToArray());
    }
    private void组合框\u SelectedIndexChanged(对象发送方,事件参数e)
    {
    listBox.Items.Add(comboBox.SelectedItem);
    }
    }
    公共类客户端
    {
    公共字符串名称{get;set;}
    }
    
    您可以在(未键入的)行轻松获取:

    之后,如果您知道列名,这取决于您需要什么列:

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

    如果您先选中并排除null,它应该可以工作。它可以工作,但会显示字符串“Systm.Data.DataRowView”,这将是非常有价值的信息,可以包含在您的问题中:-{tnx寻求帮助,第二个解决了问题,但slugster首先提到了这一点。因此我必须给他“nike符号”
    object value = row["Column"];
    listbox.Items.Add(value);