Combobox SelectedValue返回System.Data.DataRowView甚至转换为String

时间:2015-05-22 18:17:58

标签: c# winforms combobox dataset datasource

我想在TextBox的值发生变化后更改ComboBox控件的值。我的代码在第一次System.Data.DataRowView值更改时返回ComboBox。 这就是为什么我在第一次调用我的组合框时得到一个Object而不是实际值。

 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中的值发生变化时,它也应该改变我的TextBox的值。

        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();
        }

1 个答案:

答案 0 :(得分:3)

正如前面提到的here和其他几个地方,如果你没有在显示和值成员之后指定数据源,就会发生这种情况。这是正确的顺序:

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