private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //labelSelectedValue.Text = listBox1.SelectedValue.ToString();
            labelSelectedValue.Text = listBox1.SelectedItem.ToString();
        }查了资料显示:
selectedItem——指的是选中的dropdownlist中选项,为ListItem,只读不写selectedValue——指的是选中的dropdownlist中选项的值,为string, 只读不写
selecteditem是选中的项,它包括value和text(value和text不都是一样的吗)selectedvalue是选中项的value
我上面的程序用selectedvalue没问题,用了selecteditem显示system.data.datarowv。请问难道我就不能从selecteditem获得value,然后使selectedvalue的功能等于selecteditem(可惜vs10没有selecteditem.Value)

解决方案 »

  1.   

    selectedvaluechanged是选中项的value变化时,但item不一定变化
      

  2.   

    selectedindex获得的是选定项的索引,索引值是从0开始.
    selectedvalue是所有选择的值
    两者返回的东西不一样,前者返回一个string值,后台返回一个ListItem对象.
      

  3.   


    SelectedValue==SelectedItem.Value// true
      

  4.   

    在我下面这个程序应该是一对一的啊
            private void Form1_Load(object sender, EventArgs e)
            {
                MyDatabaseDataSet myDatabaseDataSet = new MyDatabaseDataSet();
                MyDatabaseDataSetTableAdapters.MyTable1TableAdapter adapter =
                    new DataBindingExample.MyDatabaseDataSetTableAdapters.MyTable1TableAdapter();
                adapter.Fill(myDatabaseDataSet.MyTable1);
                //将bindingSource1绑定到数据源
                BindingSource bindinSource1 = new BindingSource();
                bindinSource1.DataSource = myDatabaseDataSet;
                bindinSource1.DataMember = "MyTable1";
                //绑定textBox1到“名称”
                textBox1.DataBindings.Add("Text", bindinSource1, "名称");
                //将dataGridView1绑定到BindingSource
                dataGridView1.DataSource = bindinSource1;
                //将listBox1绑定到BindingSource
                listBox1.DataSource = bindinSource1;
                listBox1.DisplayMember = "名称";
                listBox1.ValueMember = "编码";
                labelSelectedValue.Text = listBox1.SelectedValue.ToString();
            }
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                labelSelectedValue.Text = listBox1.SelectedValue.ToString();
                //labelSelectedValue.Text = listBox1.SelectedItem.ToString();
            }
        }
    }
      

  5.   

    SelectItem没有Value这个属性,在VS10中
      

  6.   

    请问我3楼的代码中,当我选择数学院时,选择的实际值应该为02,可是用 //labelSelectedValue.Text = listBox1.SelectedItem.ToString();代替labelSelectedValue.Text = listBox1.SelectedValue.ToString();,结果就变成了system.data.datarowv
      

  7.   

    因为SelectedItem确实是一个system.data.datarowv类型的对象
      

  8.   

    但是我想要的是SelectedItem里的值,比如选了数学院,值就是02,因为已经绑定了
      

  9.   

    转换一下啊
    ((DataRow)SelectedItem)["名称"]我怎么觉得你可以直接用
    listBox.Text
      

  10.   

    我只是好奇能不能从selecteditem获得value?
    难道百度这句话是骗人的selecteditem是选中的项,它包括value和text(value和text不都是一样的吗)
      

  11.   


    能的,selecteditem返回的是object,你绑定数据源是什么类型,返回的就是什么类型...
      

  12.   

     labelSelectedValue.Text = ((DataRow)listBox1.SelectedItem)["名称"].ToString();
    错误了,提示
    Unable to cast object of type 'System.Data.DataRowView' to type 'System.Data.DataRow'.
      

  13.   

    ((DataRowView)listBox1.SelectedItem)["名称"].ToString();
      

  14.   

    恩,谢谢大家
    其实你这句话 labelSelectedValue.Text = (((DataRowView)listBox1.SelectedItem)["名称"]).ToString();相当于直接等于listbox1.Text,就是选择了数学院那么实际显示的值就是数学院;
    而课本例子labelSelectedValue.Text = listBox1.SelectedValue.ToString();是选择了数学院那么实际显示的值就是02;是绑定了的值。。
    也许这两个实际上根本就没关系,绑定惹的祸。。
               
               
      

  15.   

    (((DataRowView)listBox1.SelectedItem)["名称"]).ToString();
    listbox1.Text
    不太一样,后者是前者的拷贝,应该是的