C# 组合框SelectedValue返回System.Data.DataRowView,甚至转换为字符串

C# 组合框SelectedValue返回System.Data.DataRowView,甚至转换为字符串,c#,winforms,combobox,dataset,datasource,C#,Winforms,Combobox,Dataset,Datasource,在组合框的值更改后,我试图更改文本框控件的值。我的代码在第一次ComboBox值更改时返回System.Data.DataRowView。 这就是为什么我在第一次调用combobox时得到的是一个对象而不是实际值 private void radioButton2_CheckedChanged(object sender, EventArgs e) { SqlConnection con = new SqlConnection(Configuratio

组合框
的值更改后,我试图更改
文本框
控件的值。我的代码在第一次
ComboBox
值更改时返回
System.Data.DataRowView
。 这就是为什么我在第一次调用combobox时得到的是一个对象而不是实际值

 private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnectionString"].ConnectionString);
            con.Open();

            SqlDataAdapter da = new SqlDataAdapter();

            SqlCommand cmd= new SqlCommand("SELECT donor_name,ID FROM donor_detail",con);
            cmd.CommandType = CommandType.Text;
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);            
            DonorName.DataSource = dt;
            DonorName.DisplayMember = "donor_name";
            DonorName.ValueMember = "ID";
            con.Close();
        }
这是更改ComboBox值的事件,当ComboBox中的值更改时,它也应该更改我的文本框的值

        private void DonorName_SelectionChangeCommitted(object sender, EventArgs e)
        {
            var id = Convert.ToString(DonorName.SelectedValue);

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnectionString"].ConnectionString);
            con.Open();

            String sql = "SELECT * from donor_detail WHERE ID=" + id + "";

            SqlCommand cmd = new SqlCommand(sql,con);
            SqlDataAdapter da = new SqlDataAdapter();
           cmd.CommandType = CommandType.Text;
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);
            MessageBox.Show(sql);          
mobile.Text = dt.Rows[0]["mobile"].ToString();


            con.Close();
        }
如前所述和其他几个地方所述,如果不在显示和值成员之后指定数据源,就会发生这种情况。这是正确的顺序:

DonorName.DisplayMember = "donor_name";
DonorName.ValueMember = "ID";
DonorName.DataSource = dt;

我没有看到你在那一秒钟的任何地方使用文本框block@DrewJordan我也添加了代码,我删除了那一行,因为我的主要问题是ComboBox在第一次调用时没有返回值,所以。。。您的问题是
DonorName.SelectedValue
为空吗?否,@DrewJordan
DonorName.SelectedValue
当我单击单选按钮时返回
System.Data.DataRowView
,因此它触发
DonorName\u SelectionChangeCommitted
事件,该事件生成异常,因为我的查询需要ID来获取数据,现在我明白了。选中,您应该先指定显示成员,然后指定valuemember,然后指定datasource。我已经在显示成员之后指定了datasource,并且仍然为selectedvalue返回System.Data.DataRowView