-1
OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT nazivMaterijala FROM popisMaterijala",     con);
DataTable dt = new DataTable();
da2.Fill(dt);
BindingSource bndSource2 = new BindingSource();
bndSource2.DataSource = dt;
this.comboBox1.DataSource = bndSource2;
comboBox1.DisplayMember = "nazivMaterijala";
comboBox1.ValueMember = "nazivMaterijala";

コードのこの部分で、テーブル名をコンボボックスに取得します

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection(connectionString);
        OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT * FROM ["     +this.comboBox1.SelectedValue.ToString() +"]", con);
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        da2.MissingSchemaAction = MissingSchemaAction.AddWithKey;
        da2.Fill(dt);
        this.dataGridView1.DataSource = dt; 
    }

コンボボックス1から何かを選択した後、選択したテーブルのデータをグリッドビューに入力する必要がありますが、動作させることはできません

実行しようとすると、次のメッセージが表示されます。Microsoft Access データベース エンジンは、入力テーブルまたはクエリ 'System.Data.DataRowView' を見つけることができません。存在すること、およびその名前のつづりが正しいことを確認してください。

4

2 に答える 2

0

代わりに、 SelectionChangeCommittedを使用してみてください。バインド中に SelectedValueChanged イベントが発生し、このコンテキストでは、実際の値 DisplayMember と ValueMember が正しく設定されていません。

private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
    // Better to be safe here.....
    if (this.comboBox1.SelectedValue == null)
        return;

    using(OleDbConnection con = new OleDbConnection(connectionString))
    using(OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT * FROM ["     +this.comboBox1.SelectedValue.ToString() +"]", con))
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        da2.MissingSchemaAction = MissingSchemaAction.AddWithKey;
        da2.Fill(dt);
        this.dataGridView1.DataSource = dt; 
    }
}

問題のより良い説明については、この質問も参照してください

于 2013-06-24T14:36:52.420 に答える