C# 如何根据ComboBox选择的更改事件将数据库中的数据提取到textbox中
我想根据C# 如何根据ComboBox选择的更改事件将数据库中的数据提取到textbox中,c#,winforms,combobox,C#,Winforms,Combobox,我想根据组合框的selectedIndexChanged事件从数据库加载数据。我有两个控件,cbDocName和tbDocFee这意味着当我从cbDocName中选择Doc时,Doc fee应该加载到tbDocFee中。以下是代码和随附的图片 上面的代码工作得很好,但是它没有在cbDocName中显示docName,而是将DocID显示为DisplayMember。以下是表单加载事件的代码 private void frmDocAppoinment_Load(object sender, Ev
组合框
的selectedIndexChanged事件
从数据库加载数据。我有两个控件
,cbDocName
和tbDocFee
这意味着当我从cbDocName
中选择Doc时,Doc fee应该加载到tbDocFee中。以下是代码和随附的图片
上面的代码工作得很好,但是它没有在cbDocName中显示docName,而是将DocID显示为DisplayMember
。以下是表单加载事件的代码
private void frmDocAppoinment_Load(object sender, EventArgs e)
{
cbDocsName.DataSource = DocAppoinmentSystem.Utillities.clsNewApp.LoadDocNameComboBox();
cbDocsName.DisplayMember = "DocName";
cbDocsName.ValueMember = "ID";
}
更新:LoadDocNameComboBox()代码如下
public static DataTable LoadDocNameComboBox()
{
DataTable dtCampus = new DataTable();
string CS = ConfigurationManager.ConnectionStrings["MyCon"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
using (SqlCommand cmd = new SqlCommand("SELECT ID,DocName FROM AddDoctor WHERE DocStatus='PRESENT'", con))
{
cmd.CommandType = CommandType.Text;
con.Open();
SqlDataReader r = cmd.ExecuteReader();
dtCampus.Load(r);
}
}
return dtCampus;
}
注意:cbDocName.SelectedIndex、cbDocName.SelectedText、cbDocName.SelectedItem
在所有这些操作中,我都会收到一个错误
对象引用未设置为对象的实例
请检查您的DocAppointSystem.Utillities.clsNewApp.LoadDocNameComboBox()所包含的对象列表
他回来了。我确信您用于DisplayMember的属性具有不同的名称。请检查“DocName”属性。可能是一个简单的拼写错误。您需要使用:
cmd.Parameters.AddWithValue("@ID", cbDocsName.SelectedValue);
加载组合框时,您已将DocName设置为DisplayMember,将ID设置为ValueMember。因此,在选择时,SelectedText将成为名称,SelectedValue将成为ID。因此,在从数据库检索费用数据时,您需要参考该值,或者在本例中为SelectedValue
编辑
另外请注意,您必须在DataSource之前设置ValueMember和DisplayMember。因此,您需要:
cbDocsName.DisplayMember = "DocName";
cbDocsName.ValueMember = "ID";
cbDocsName.DataSource = LoadDocNameComboBox();
可能有助于准确了解LoadDocNameComboBox
返回的内容。显示LoadDocNameComboBox
的功能。{LoadDocNameComboBox}从数据库返回DocName和DocID,并使用cmd.Parameters.AddWithValue(@ID),cbDocsName.SelectedValue)填充ComboBox{LoadDocNameComboBox}返回DataTable代码>我收到一个错误System.Data.dll中发生了System.ArgumentException类型的异常,但未在用户代码中处理其他信息:不存在从对象类型System.Data.DataRowView到未知托管提供程序本机类型的映射。`tbDocFees.Text=cmd.ExecuteScalar().ToString();`在这一行中,我将{Scalar}更改为{Reader},但没有帮助什么类型是docfeesdocfees数据类型是nVarcharTry tbDocFees.Text=(string)cmd.ExecuteScalar();没有任何拼写错误
cbDocsName.DisplayMember = "DocName";
cbDocsName.ValueMember = "ID";
cbDocsName.DataSource = LoadDocNameComboBox();