【发布时间】:2016-02-24 07:16:16
【问题描述】:
我正在尝试在 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 窗体还很陌生。 在此先感谢,很抱歉发了这么长的帖子
【问题讨论】:
-
使用本地声明的 DataSet 变量并抛弃全局变量。
标签: c# winforms datagridview