如下代码:
for(int i = 0;i<this.listBox2.SelectedItems.Count;i++)
{
this.listBox1.Items.Add(this.listBox2.SelectedItems[i].ToString());
}
为何this.listBox2.SelectedItems[i].ToString()总是输出为"System.Data.DataRowView",而不是所选的显示项?我的listBox2的显示项是从数据库中得到的。万分感谢!
for(int i = 0;i<this.listBox2.SelectedItems.Count;i++)
{
this.listBox1.Items.Add(this.listBox2.SelectedItems[i].ToString());
}
为何this.listBox2.SelectedItems[i].ToString()总是输出为"System.Data.DataRowView",而不是所选的显示项?我的listBox2的显示项是从数据库中得到的。万分感谢!
如果要显示其中的值那就要不能用默认的ToString()方法了.
取选项值用this.listBox2.SelectedItems[i].Text
取选项值用this.listBox2.SelectedItems[i].Text
取选项值用this.listBox2.SelectedItems[i].Text
--------------------
不会吧,好像没有Text这样的属性...如果你在ListBox里想在每一个Item里存放两个值(Text,Value),那么你可以先定义一个类(或结构):
class TextValue
{
public string Text;
public object Value;
public TextValue(string text, object value)
{
Text = text;
Value = value;
}
public override string ToString()
{
return Text;
}
}
然后把你从数据库里取出的值用TextValue来表示并添加入ListBox,比如:
TextValue tv = new TextValue(dataTable.Rows[i]["名称"].ToString(), dataTable.Rows[i]["Value"])
this.listBox1.Items.Add(tv);这样当取listbox的值的时候可以这样的来取:
TextValue tv = (TextValue)this.listBox1.SelectedItems[i];
//tv.Text;
//tv.Value;
{
listBox2.Items.Add(dv .Row["sname"].ToString ());
}
{
DataBind();
}
private void DataBind()
{
OleDbConnection con = new OleDbConnection("Provider=OraOLEDB.Oracle.1;data source=oracle;user id=***;password=***");
OleDbDataAdapter sda = new OleDbDataAdapter("select * from student", con);
DataSet ds = new DataSet();
sda.Fill(ds, "student");
this.listBox1.DataSource = ds.Tables["student"];
this.listBox1.DisplayMember = "sname";
} private void button1_Click(object sender, EventArgs e)
{
foreach (DataRowView dv in this.listBox1.SelectedItems)
{
listBox2.Items.Add(dv .Row["sname"].ToString ());
}
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.listBox1.SelectedItems.Count; i++)
{
this.listBox2.Items.Add(((System.Data.DataRowView)this.listBox1.SelectedItems[i]).Row["sname"].ToString());
}
}