C#Mysql在Form1中搜索并在form2中显示结果

时间:2016-08-10 17:04:49

标签: c# mysql

我的form1有searchToolStripTextBox,一个不可见(visible = false)btnSearch,panel1(用于加载form2)和dataToolStripMenuItem(显示form2)。虽然form2有连接到mysql的dgvData(datagridview)

问题是我想使用searchToolStripTextBox搜索某人的名字(当我按下回车键,btnSearch会触发)在form1和form2中,dgvData会选择它

这是我的代码(在form1中)

 private void dataToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FData FD = new FData();
        FD.TopLevel = false;
        panel1.Controls.Clear();
        panel1.Controls.Add(FD);
        FD.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        FD.Dock = DockStyle.Fill;
        FD.Show();
        formtoolStripStatusLabel.Text = "Data";
    }

 private void btnSearch_Click(object sender, EventArgs e)
    {
        FData FD = new FData();

        MySqlConnection con = new MySqlConnection(MyConnectionString);
        con.Open();
        try
        {
            MySqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "Select * from tb_pasien where Pasien = '" + searchtoolStripTextBox.Text + "';";


            MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            adap.Fill(ds);
            FD.dgvData.DataSource = ds.Tables[0].DefaultView;

        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (con.State == ConnectionState.Open)
            {
                con.Clone();
            }
        }
    }

    private void searchtoolStripTextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            btnSearch_Click(this, new EventArgs());
        }
    } 
}

之前感谢。

2 个答案:

答案 0 :(得分:-1)

您正在dataToolStripMenuItem_Click方法中创建并展示表单:

FData FD = new FData();
//...
FD.Show();

但是在btnSearch_Click方法中,您创建一个全新的表单,您永远不会显示,并将您的数据发送到该表单:

FData FD = new FData();
//...
FD.dgvData.DataSource = ds.Tables[0].DefaultView;

对对象实例所做的更改不会影响该对象的其他实例。

相反,请将表单引用为类级别成员。像这样:

FData FD = new FData();

private void dataToolStripMenuItem_Click(object sender, EventArgs e)
{
    //...
    FD.Show();
}

private void btnSearch_Click(object sender, EventArgs e)
{
    //...
    FD.dgvData.DataSource = ds.Tables[0].DefaultView;
}

这样,FData表单只有一个实例,并且您显示与同一个实例进行交互。

答案 1 :(得分:-1)

点击搜索时,您正在创建FD的新实例。您应该使用在第二种方法中在第一种方法中创建的相同实例。您可以通过定义类字段来实现:

FData FD;
private void dataToolStripMenuItem_Click(object sender, EventArgs e)
{
   FD = new FData();
}

并在搜索功能中删除此行:

FData FD = new FData();

您可能还需要在对象FD的搜索功能中执行 NULL 检查。