4

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";
    }
4

1 に答える 1

3

これは、最初のコンボにデータを入力する際に​​ 2 番目のコンボボックスをロードするためです。
このエラーは、次の方法で回避できます
。 1. SelectedIndexChangedイベントの代わりに、SelectionChangeCommittedイベントを使用します。 または 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;
}

これがあなたを助けることを願っています。

于 2013-04-18T07:18:25.133 に答える