(C#)列"泄露"在标签

时间:2016-02-24 07:16:16

标签: c# winforms datagridview

我正在尝试在visual studio中使用c#和windows窗体实现一个处理数据库的接口,并遇到一个我无法解决的问题。我创建了一个包含tabControl和两个选项卡的表单,每个选项卡都有一个组合框,允许用户选择一个应用于选择查询的简单变量。 select的结果将显示在datagridview中。现在,我确定选择语句是正确的,因为我试图分别执行每个语句,因此我认为问题出在我的datagridviews实现中。当我第一次执行时,第一个选项卡中的结果是正确的,但当我单击包含datagridview2的第二个选项卡时,它会显示仅应显示在第一个选项卡中且不存在于第二个选择语句中的列。甚至更奇怪的是当我回到第一个标签时,datagridview1的列发生了同样的事情。这是我的代码的样子

private void combobox1_SelectedIndexChanged(object sender, EventArgs e)
{
   string ConStr = "myConnectionString";
   MySqlConnection DBCon = new MySqlConnection(conStr);

   string query = "SELECT field1, field2, field3, field4 FROM table1, table2 WHERE field1 = " + comboBox1.Text + ";";
   MySqlDataAdapter da = new MySqlDataAdapter(query, DBCon);

   if (ds != null)
   {
      ds.Clear();
   }

   da.Fill(ds);
   dataGridView1.DataSource = ds.Tables[0];
   dataGridView1.Columns[field1].HeaderText = "FIELD1";
   dataGridView1.Columns[field2].HeaderText = "FIELD2";
   dataGridView1.Columns[field3].HeaderText = "FIELD3";
   dataGridView1.Columns[field4].HeaderText = "FIELD4";

   if (DBCon != null)
   {
      DBCon.Close()
    }

}

private void combobox2_SelectedIndexChanged(object sender, EventArgs e)
{
   string ConStr = "myConnectionString";
   MySqlConnection DBCon = new MySqlConnection(conStr);

   string query = "SELECT field1, field4, field5 FROM table1 WHERE field1 = " + comboBox2.Text + ";";
   MySqlDataAdapter da = new MySqlDataAdapter(query, DBCon);

   if (ds != null)
   {
      ds.Clear();
   }

   da.Fill(ds);
   dataGridView2.DataSource = ds.Tables[0];
   dataGridView2.Columns[field1].HeaderText = "FIELD1";
   dataGridView2.Columns[field4].HeaderText = "FIELD4";
   dataGridView2.Columns[field5].HeaderText = "FIELD5";

   if (DBCon != null)
   {
      DBCon.Close()
    }

}

现在,当我执行时,首先在tab1中的dataGridview1包含上面列出的正确列,但是当我单击tab2时,dataGridView2显示FIELD3和FIELD4,当我单击tab1时,dataGridView1也显示FIELD5; 你能指点我一些方向,所以我可以解决这个问题,因为我对c#和windows表格相当新。 在此先感谢并为长篇文章感到抱歉

1 个答案:

答案 0 :(得分:2)

问题是您在两者之间使用共享(公共)DataSetDataTable

请注意,DataSet.Clear不会从数据集中删除现有表,但根据文档

  

删除所有表格中的所有行,清除任何数据的数据集。

要解决此问题,请勿使用共享数据集。删除ds字段,只需在两个地方都替换

if (ds != null)
{
    ds.Clear();
}

var ds = new DataSet();  
相关问题