在Form1中搜索并在form2中显示结果

本文关键字:显示 结果 form2 搜索 Form1 | 更新日期: 2023-09-27 18:01:41

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

问题是我想搜索某人的名字使用searchToolStripTextBox(当我按enter, btnSearch将触发)在form1和form2 dgvData将选择它

这是我的代码(in 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());
        }
    } 
}

谢谢。

在Form1中搜索并在form2中显示结果

您正在创建并显示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表单的实例,你同时显示与同一个实例交互

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

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

并删除搜索功能中的这一行:

FData FD = new FData();

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