0

私の次のコードを見てください:

private void button2_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection("Data Source=localhost; database=KnowledgeEssentials;Trusted_Connection= True;connection timeout=30");

    SqlDataAdapter ad = new SqlDataAdapter("SELECT  distinct Problem FROM ProblemT ORDER BY Problem", conn);
    //ad.SelectCommand = new SqlCommand(@"SELECT  distinct Problem FROM ProblemT", conn);
    DataTable dt = new DataTable();
    ad.Fill(dt);

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        comboBox1.Items.Add(dt.Rows[i]["Problem"]);
    }
}

private void button3_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection("Data Source=localhost; database=KnowledgeEssentials;Trusted_Connection= True;connection timeout=30");
    SqlDataAdapter ad = new SqlDataAdapter("SELECT ProblemIDQA, Question FROM dbo.ProblemT INNER JOIN dbo.QuestionAnswer ON dbo.ProblemT.ProblemID = dbo.QuestionAnswer.ProblemIDQA", conn);
    DataTable dt = new DataTable();
    ad.Fill(dt);
    dataGridView1.DataSource = dt;
    comboBox1.DataSource = dt;
    //comboBox1.DataSource = "SELECT  distinct Problem FROM ProblemT ORDER BY Problem";

ボタン 2 は、データをコンボボックスに入力するだけです

コンボボックス内に選択した項目を入れて、データグリッドビューに INNER JOIN として入力するには、ボタン 3 が必要です.....たとえば

コンボボックス内の問題を選択します ボタン 3 を押します データグリッドビュー内の問題の解決策を入力します

4

1 に答える 1

0

回答を投稿する前に少し説明を求めたかもしれませんが、コメント機能はまだないようです。

おそらく役立ついくつかのことは、2 つのテーブルのテーブル スキーマ定義ですが、あなたがやろうとしていることの要点を理解していると思います。これが私がすることです。

コンボボックスにデータを入力するとき、あなたが行っているようにアイテムを追加するのではなく、データソースをデータテーブルにバインドします。(クエリに ProblemID 列を追加する必要があります)

だからこれの代わりに

for (int i = 0; i < dt.Rows.Count; i++)
{
    comboBox1.Items.Add(dt.Rows[i]["Problem"]);
}

これを行う

comboBox1.DisplayMember = "Problem";
comboBox1.ValueMember = "ProblemID"; 
comboBox1.DataSource = dt;

ここで、Button3_Click (おそらく実際には、comboBox1_SelectedIndexChanged でこれを行いますが、何でも) で、選択したコンボボックスの値でクエリをフィルター処理します。

if (comboBox1.SelectedValue != null)
{
  int problemID = (int) comboBox1.SelectedValue;
  SqlDataAdapter ad = new SqlDataAdapter("SELECT ProblemIDQA, Question FROM dbo.ProblemT INNER JOIN dbo.QuestionAnswer ON dbo.ProblemT.ProblemID = dbo.QuestionAnswer.ProblemIDQA WHERE ProblemT.ProblemID = " + problemID.ToString(), conn);
...

もう button3_Click でコンボボックスのデータソースを設定する必要はありません。また、より効率的になりたい場合や、QuestionAnswer テーブルのサイズがそれほど大きくない場合は、ボタン クリックでデータベース クエリを実行せず、たとえば、フォームのロード イベントでデータセット全体をロードします。一度だけロードされます。次に、DataView/BindingSource を使用して、グリッドの実際のフィルタリングを行います。

于 2012-07-25T19:42:08.220 に答える