用同一数据库中的不同表填充两个不同的datagridview

7vux5j2d  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(237)

我正在开发一个兽医应用程序,使用c#和sql。当我有权访问客户机历史记录时,它将填充我的pacient datagridview。我想知道当我选择了pacient的行时,如何从pacient datagridview填充clinic history datagridview。已经从load执行了clearselection()以取消选择任何pacient,但是我尝试了执行selectedrow事件,在clinic history datagridview上什么也没有发生。如果需要,我可以把代码或图片后。
ps:门诊历史表有外键链接到pacient表。
编辑:这是我写的代码。getdata获取pacient的表,getdata2获取clinichistory的表。

private void GetData(string selectCommand)
    {
        try
        {
            dataAdapter = new SqlDataAdapter(selectCommand, connString);
            table = new DataTable();
            table.Locale = System.Globalization.CultureInfo.InvariantCulture;
            dataAdapter.Fill(table);
            bindingSource17.DataSource = table;
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    private void GetData2(string selectCommand)
    {
        dataGridView3.DataSource = null;
        try
        {
            dataAdapter = new SqlDataAdapter(selectCommand, connString);
            table = new DataTable();
            table.Locale = System.Globalization.CultureInfo.InvariantCulture;
            dataAdapter.Fill(table);
            bindingSource18.DataSource = table;
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

//这是让我困惑的部分,因为pacient表工作得很好,但clinichistory表却不是这样。下面是一个客户端搜索,它返回客户端拥有的pacient

private void button12_Click_1(object sender, EventArgs e)
    {
        Form7 Buscarcli = new Form7();
        Buscarcli.TransfEvent += frm_TransfEvent;
        Buscarcli.ShowDialog();
        dataGridView2.DataSource = bindingSource17;
        if (lblID.Text != null)
        {
            GetData("Select * from Pacientes where id_pacientes like '%" + lblID.Text + "%'");
        }
    }

//在这之后,idk如何继续让它工作。bindingsource17是pacients的datagridview,bindingsource18是相同的,但用于clinichistory。
非常感谢你。附言:我有几个星期的编码经验,所以抱歉,如果它看起来像一个完全混乱。我尽我所能。

jw5wzhpr

jw5wzhpr1#

我敢肯定,这和你的所作所为完全不同。简单的方法是:
向项目中添加新数据集
打开它,右击表面,选择“添加tableadapter”,配置connectionstring
添加如下查询 SELECT * FROM Patient WHERE ID = @id 完成向导,调用查询fillbyid/getdatabyid
添加另一个查询;右键单击tableadapter,添加查询。。 SELECT * FROM Patient WHERE lastName LIKE @lastName -或者你用什么搜索病人
叫它fillbylastname(或者别的什么)
添加另一个tableadapter- SELECT * FROM ClinicHistory WHERE ID = @Id ,fillbyid等,完成
在此基础上再增加一个wuery; SELECT * FROM ClinicHistory WHERE PatientID = @PatientID 填充物等
保存数据集
切换到窗体
显示数据源窗口(视图菜单,其他窗口)
将“患者”节点拖到窗体上
展开“患者”节点
将clinichistory拖到窗体上,它是patients表节点的子节点,而不是它的对等节点
切换到代码,从toolstriptextbox中找到填充患者表的行,在其下添加以下行:

clinicHistoryTableAdapter.ClearBeforeFill = false;
    foreach(PatientsRow ro in yourDataSetName.Patients)
      clinicHistoryTableAdapter.FillByPatientId(yourDataSetName.ClinicHistory, ro.Id);

把这行改成:

patientsTableAdapter.FillByLastName(yourDataSetName.Patients, idToolStripTextBox.Text); //todo: rename that textbox

根据上下文调整名称(我猜)
运行应用程序;将患者姓名放入顶部导航器(文本框),然后单击“填充”。。许多病人(希望如此)都会负荷。。当您单击其中任何一个时,clinichistory表将自动更新以显示相关数据

相关问题