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 只是将数据填充到我的组合框

我需要按钮 3 在我的组合框中有一个选定的项目,以作为 INNER JOIN 填充到我的 datagridview .....例如

我在组合框中选择一个问题我按下按钮 3 它在 datagridview 中填充问题的解决方案

4

1 回答 1

0

在发布答案之前,我可能会要求进行一些澄清,但显然我还没有评论功能。

一些可能会有所帮助的事情是您的两个表的表模式定义,但我想我明白了您正在尝试做的事情的要点。这就是我要做的。

填充组合框时,我会将数据源绑定到数据表,而不是像您那样添加项目。(您必须将 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 回答