listbox取值,取出来都是System.Data.DataRowView

chenhaha 2007-07-03 10:17:41
listbox绑定了一个表中select出来的数据,放到dataset里,代码如下:
private void button7_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=local;database=xxx;uid=xxx;pwd=xxx");
SqlDataAdapter Adapter = new SqlDataAdapter("select id,name from tb_employee , con);
DataSet ds = new DataSet();
Adapter.Fill(ds, "employee");
this.listBox1.DataSource = ds.Tables["employee"];
this.listBox1.DisplayMember = "name";
this.listBox1.ValueMember = "id";

数据显示出来后,想双击其中一条然后提取当前的值
private void listBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
textBox1.Text = this.listBox1.SelectedItem.ToString();
}


但取出的数据总是System.Data.DataRowView

查了以前贴子也没找到原因,麻烦大家了
...全文
1815 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人乙e 2007-07-03
  • 打赏
  • 举报
回复
this.listBox1.SelectedItem.ToString()?????
偶就挺郁闷~
amandag 2007-07-03
  • 打赏
  • 举报
回复
什么低级错误?
chenhaha 2007-07-03
  • 打赏
  • 举报
回复
好了,终于搞定了,真开心,太感谢各位了

自己的一个低级错误:)
jiatong1981 2007-07-03
  • 打赏
  • 举报
回复 1
而如果是通过this.listBox1.SelectedItem

则需要通过视图来获取相应数据

textBox1.Text = ((DataRowView)(this.listBox1.SelectedItem))["id"].ToString();
jiatong1981 2007-07-03
  • 打赏
  • 举报
回复
…………
我来说两句

this.listBox1.DisplayMember = "name";//显示的列绑定
this.listBox1.ValueMember = "id";//实际值得列绑定
this.listBox1.DataSource = ds.Tables["employee"];

private void listBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
textBox1.Text = this.listBox1.SelectedValue.ToString();//实际值得列取值即id列
}
lhqalive 2007-07-03
  • 打赏
  • 举报
回复
一步一步跟踪啊
chenhaha 2007-07-03
  • 打赏
  • 举报
回复
按照lxcnn(过客)的方法,可以提取出,但是运行到textBox1.Text = rowView.Row["id"].ToString();会报错:列“id”不属于表 employee。

其他的办法都试了,好象也都不行,真是头疼
lhqalive 2007-07-03
  • 打赏
  • 举报
回复
跟踪一下,看看ds是否有值
SassyBoy 2007-07-03
  • 打赏
  • 举报
回复
晕,少了一句。dr=cmd.ExecuteReader();
SassyBoy 2007-07-03
  • 打赏
  • 举报
回复
private void button7_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=local;database=xxx;uid=xxx;pwd=xxx");
SqlDataReader dr;
con.Open();
SqlCommand cmd = new SqlCommand ("select id,name from tb_employee , con);
this.listBox1.DataSource = dr
this.listBox1.DisplayMember = "name";
this.listBox1.ValueMember = "id";

dr.Close();
dr=null;
con.Close();
con=null;


private void listBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.SelectedIndex!=-1)
textBox1.Text = this.listBox1.SelectedValue;
}
bote_china 2007-07-03
  • 打赏
  • 举报
回复
SelectedItem属性是DataRowView对象,可以通过
((DataRowView)this.listBox1.SelectedItem)["id"];
((DataRowView)this.listBox1.SelectedItem)["name"];
来取值,这样可以同时访问选中项对应的其它值,当然用SelectedValue可以直接获取所选项的id值
SassyBoy 2007-07-03
  • 打赏
  • 举报
回复
为何不用DataReader,像这类只显示的数据,dr性能会好点。
O15013245O 2007-07-03
  • 打赏
  • 举报
回复
textBox1.Text = this.listBox1.SelectedItem.ToString();
-------------------------------------------------
textBox1.Text = this.listBox1.SelectedItem.Value.ToString();
textBox1.Text = this.listBox1.SelectedItem.Text.ToString();

textBox1.Text = this.listBox1.SelectedValue.ToString();


NetFlag 2007-07-03
  • 打赏
  • 举报
回复
listBox1.SelectedItem.Value.ToString()
Snowdust 2007-07-03
  • 打赏
  • 举报
回复
原因出在:textBox1.Text = this.listBox1.SelectedItem.ToString();
应改用listBox1.SelectedValue
benetcs 2007-07-03
  • 打赏
  • 举报
回复
要取得选中项的值,应该用SelectValue属性!
改成如下:
textBox1.Text = this.listBox1.SelectedValue.ToString();
-过客- 2007-07-03
  • 打赏
  • 举报
回复
这一问题与绑定代码无关,与你的取值方式有关

if (listBox1.SelectedItem != null)
{
DataRowView rowView = (DataRowView)listBox1.SelectedItem;
textBox1.Text = rowView.Row["id"].ToString();
textBox2.Text = rowView.Row["name"].ToString();
}
GXY2005 2007-07-03
  • 打赏
  • 举报
回复
用SelectedValue
BearRui 2007-07-03
  • 打赏
  • 举报
回复
try:


this.listBox1.DisplayMember = "name";
this.listBox1.ValueMember = "id";
this.listBox1.DataSource = ds.Tables["employee"];
netusemaster 2007-07-03
  • 打赏
  • 举报
回复
private void button7_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=local;database=xxx;uid=xxx;pwd=xxx");
con.open();

SqlDataAdapter Adapter = new SqlDataAdapter("select id,name from tb_employee , con);
DataSet ds = new DataSet();
Adapter.Fill(ds, "employee");
this.listBox1.DataSource = ds.Tables["employee"];
this.listBox1.DisplayMember = "name";
this.listBox1.ValueMember = "id";
con.close();
}
加载更多回复(3)

111,132

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧