我有一个在主窗体打开时调用的方法
private void populateComboBoxes()
{
SqlCeDataAdapter breakfastAdapter = new SqlCeDataAdapter("SELECT DISTINCT recipeName FROM Recipe WHERE Category = 'breakfast' ", databaseConnection);
SqlCeDataAdapter lunchAdapter = new SqlCeDataAdapter("SELECT DISTINCT recipeName FROM Recipe WHERE Category = 'lunch' ", databaseConnection);
breakfastAdapter.Fill(breakfastDS, "Recipe");
lunchAdapter.Fill(lunchDS, "Recipe");
cmbBox1.DisplayMember = "recipeName";
cmbBox1.ValueMember = "recipeName";
cmbBox1.DataSource = breakfastDS.Tables["Recipe"];
cmbBox2.DataSource = lunchDS.Tables["Recipe"];
cmbBox2.DisplayMember = "recipeName";
cmbBox2.ValueMember = "recipeName";
}
这实际上是根据 SELECT 语句填充两个组合框。一旦此方法命中 cmbBox1.DataSource = breakfastDS.Tables["Recipe"]
,它就会停止执行并移至此方法:
private void cmbBox1_SelectedIndexChanged(object sender, EventArgs e)
{
rtbPicture.Visible = false;
string qry = "";
qry = "SELECT DISTINCT ingredientName FROM Recipe WHERE recipeName = " + cmbBox1.SelectedItem.ToString();
SqlCeCommand com = new SqlCeCommand(qry, databaseConnection);
com.CommandText = qry;
rtbRecipe.Text = com.ExecuteScalar().ToString();
}
此方法应该执行 select 语句并将该信息放入 richtextbox
,但由于某些原因未设置 cmbBox1
。根据我的理解,第一个 combobox
已经在前面的方法中设置了显示和值成员。但是,当我到达 cmbBox1.SelectedItem.ToString()
时,它返回 System.Data.DataRowView
而不是 combobox
中的实际字符串.我不确定为什么它给我 System.Data.DataRowView
而不是字符串。
最佳答案
您正在使用 cmbBox1.SelectedItem.ToString()
。
您可能应该改用 SelectedValue
:
qry = "SELECT DISTINCT ingredientName FROM Recipe WHERE recipeName = " + cmbBox1.SelectedValue.ToString();
SelectedItem
获取实际的 ComboBox
项(在本例中为 DataRowView
),而 SelectedValue
获取值您指定为 ComboBox
的 ValueMember
的属性。
关于c# - 组合框和 System.Data.DataRowView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625479/