C# “多部分标识符”;System.Data.DataRowView“;无法约束

C# “多部分标识符”;System.Data.DataRowView“;无法约束,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我有一个填充Combobox1的表,Combobox1应该填充Combobox2,这就是问题所在。 这是我得到的例外 无法绑定多部分标识符“System.Data.DataRowView” 代码: private void frm2_Load(object sender, EventArgs e) { //Populate Combobox1 SqlDataAdapter da = new SqlDataAdapter("SELECT Catego

我有一个填充Combobox1的表,Combobox1应该填充Combobox2,这就是问题所在。 这是我得到的例外

无法绑定多部分标识符“System.Data.DataRowView”

代码:

    private void frm2_Load(object sender, EventArgs e)
    {
        //Populate Combobox1
        SqlDataAdapter da = new SqlDataAdapter("SELECT CategoryID, Name FROM Categories", clsMain.con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        comboBox1.DataSource = ds.Tables[0];
        comboBox1.DisplayMember = "Name";
        comboBox1.ValueMember = "CategoryID";
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //populate Combobox2
        SqlDataAdapter da = new SqlDataAdapter("SELECT SubCategoryID, Name FROM SubCategories WHERE CategoryID=" + comboBox1.SelectedValue, clsMain.con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        comboBox2.DataSource = ds.Tables[0];
        comboBox2.DisplayMember = "Name";
        comboBox2.ValueMember = "SubCategoryID";
    }

这是因为在第一个组合框中填充数据时加载了第二个组合框
您可以通过以下方法避免此错误:
1.使用SelectionChangeCommitted事件而不是SelectedIndexChanged事件

2.分离所选索引更改事件,填充组合框,再次将事件附加为:

private void frm2_Load(object sender, EventArgs e)
{
   //Detach event
   comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;

    //Populate Combobox1
    SqlDataAdapter da = new SqlDataAdapter("SELECT CategoryID, Name FROM Categories", clsMain.con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    comboBox1.DataSource = ds.Tables[0];
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "CategoryID";

   //Attach event again
    comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}

希望这能对你有所帮助。

我没想到会那么容易。两种方法都很好,我非常感谢你的帮助,这非常有帮助..谢谢:)