繁体   English   中英

Combobox和System.Data.DataRowView

[英]Combobox and System.Data.DataRowView

我有一个在打开主窗体时调用的方法

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获取您指定为ComboBoxValueMember的属性的值。

cmbBox2.DisplayMember =“recipeName”;

cmbBox2.DataSource = lunchDS.Tables [“Recipe”];

cmbBox2.ValueMember =“recipeName”;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM