日期:2014-05-19  浏览次数:20795 次

listBox绑定到DataSet问题
我用一个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为什么就不行了呢.请高手告诉我按钮事件应该怎么写.谢谢了

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

LS正确