我用一个listBox1绑定到DataSet,用下面的办法
listBox1.DataSource = ds1.Tables[0];
listBox1.DisplayMember = ds1.Tables[0].Columns[1].ToString();
listBox1.ValueMember = ds1.Tables[0].Columns[1].ToString();
然后我用一个按钮把listBox1里的数值全部复制到listBox2里,按钮事件代码是:
this.listBox2.Items.Clear();
for (int i = 0; i < this.listBox1.Items.Count; i++)
{
this.listBox2.Items.Add(this.listBox1.Items[i]);
}但复制过去的是数值变成了System.Data.DataRowView我记得listBox绑定到SqlDataReader,用这个办法是可以的,但绑定到DataSet为什么就不行了呢.请高手告诉我按钮事件应该怎么写.谢谢了

解决方案 »

  1.   

    这样写:
    Object s = this.listBox1.Items[i];
    this.listBox2.Items.Add(this.listBox1.GetItemText(s));
      

  2.   

    this.listBox2.Items.Add(this.listBox1.Items[i].ToString());
      

  3.   

    this.listBox2.Items.Add(this.listBox1.Items[i].ToString());
      

  4.   

    如果复制过去了,你应该相应的设置它的DisplayMember 及ValueMember
      

  5.   

    在ListBox绑定数据源后,它只是把数据行加到了ListBox.Items,为了显示内容及可以取到选中的值,所以才设置了DisplayMember 及ValueMember,如果对一个ListBox进行Items的复制,少了这两个属性,ListBox就不知道要显示什么了,只能调用Items中的每一个Item的默认的ToString()来显示,因为Item是DataRowView类型的,DataRowView类型的ToString就是返回DataRowView,所以才出现了你看到的现象.
      

  6.   

    this.listBox2.Items.Add(this.listBox1.Items[i].ToString());LS正确
      

  7.   

    我找到解决办法了,正确的应该是:
    this.listBox2.Items.Add(this.listBox1.GetItemText(listBox1.Items[i]));
    谢谢各位了