C# 删除数据网格视图中重复的行

C# 删除数据网格视图中重复的行,c#,datagridview,C#,Datagridview,我试图将两个独立表中的数据显示到数据网格视图中,我知道它可能不是为此目的而设计的,尽管我确信有一种方法可以阻止它生成多个重复行,如下所示 下面是获取数据的代码,我确实打算在以后的代码中添加一个过滤器或特定的搜索查询,如代码中所述,今天就是这样 private void FillPatients() { SqlConnection connection = new SqlConnection(); //DateTime timeNow = DateTime.Now; //

我试图将两个独立表中的数据显示到数据网格视图中,我知道它可能不是为此目的而设计的,尽管我确信有一种方法可以阻止它生成多个重复行,如下所示

下面是获取数据的代码,我确实打算在以后的代码中添加一个过滤器或特定的搜索查询,如代码中所述,今天就是这样

private void FillPatients()
{
    SqlConnection connection = new SqlConnection();

    //DateTime timeNow = DateTime.Now;
    //string format = "MMM ddd d HH:mm yyyy";

    try
    {
        connection.ConnectionString = connectionPath;
        connection.Open();

        SqlCommand cmd = new SqlCommand("SELECT BookingId, Date, PatientId, Firstname, Surname FROM Bookings, Patients", connection);
        //cmd.Parameters.AddWithValue("@Date", timeNow.ToString(format));
        SqlDataAdapter dap = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        dap.Fill(dt);

        BindingSource bs = new BindingSource();
        bs.DataSource = dt;
        dgv.DataSource = bs;
        dap.Update(dt);

        DialogResult dlgResult;
        dlgResult = MessageBox.Show(
                "Patients loaded",
                "Patients",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information,
                MessageBoxDefaultButton.Button1);

    }
    catch (SqlException sql)
    {
        MessageBox.Show(sql.Message);
    }
    finally
    {
        connection.Close();
        connection.Dispose();
    }
}

我认为您需要将SQL更改为:

SELECT BookingId, Date, PatientId, Firstname, Surname 
FROM Bookings 
INNER JOIN Patients ON Patients.PatientId = Bookings.PatientId;

从注释转换而来

您的查询当前生成的是一个。本质上,这意味着您将从预订中获得每一行,并将每一行与患者的每一行相结合

你可能想要的是一个。内部联接允许您为从右侧表(在本例中为Patients)联接的记录指定谓词,因此对于每个预订,您可以根据外键获取与其关联的患者


注意:通过WHERE子句进行交叉联接可以获得相同的结果,但该子句已被弃用,并且根据RDBMS的不同,您可能会看到不同的性能。

为什么不将查询更改为选择DISTINCT呢?您从中选择的第二个表在哪里。。?如果这些都存储在一个表中,那么Distinct可以返回您需要的内容,比如SqlCommand cmd=new SqlCommandSELECT Distinct BookingId、Date、PatientId、Firstname、Bookings中的姓氏、Patients、connection;还可以执行子选择或使用Where子句。。这里的许多选项似乎都不是您想要的SQL。也许您正在寻找Bookings.PatientId到Patients.PatientId的内部联接(假设您的模式支持此功能)?重复行是什么意思?如果对所有值进行比较,我在您的屏幕截图中看不到任何重复项。@wgraham我将对此进行详细说明try@AJ有些记录甚至不存在于我的表格中,例如,我没有与PatientId 2预约ID 2如果这有道理Wgraham有这个想法,R.shilling你给了我一个简单的答案,不管怎样,谢谢大家的帮助