问题很简单, 如何使用c#?
将ComboBox选中的项插入ListBox我试过这个:
listbox.Items.Add(combobox.SelectedItem);
和其他一些排列,但它总是显示System.Data.DataRowView或类似的东西..
编辑:roblem受到了这个2 的影响lbList.DisplayMember = "hm";
lbList.ValueMember = "ID";
答案 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()
来计算要显示的内容。
你可以
object
的{{1}}返回值转换为ComboBox.SelectedItem
,并添加要显示的列的值。 (即DataRowView
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);