c#删除datagridview中的重复行

c# remove duplicated rows in data grid view

我正在尝试将来自两个单独表的数据显示到数据网格视图中,我知道它可能不是为此目的而设计的,但我确信有一种方法可以阻止它产生多个重复项行如下所示;

这是获取数据的代码(我打算稍后在代码中添加一个过滤器或特定的搜索查询,今天是今天);

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;

(从评论转换而来)

您的查询当前生成的是 cross join。从本质上讲,这意味着您将从 Bookings 中的每一行与 Patients 中的每一行相结合。

您可能想要的是 inner join。内部联接允许您为从 "right" table(在本例中为 Patients)联接的记录指定谓词,因此对于每个 Booking,您可以获得 Patient根据外键与之关联。

注意:您可以通过 WHERE 子句使用交叉连接实现相同的结果,但它已被弃用,并且根据 RDBMS,您可能会看到不同的性能。