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

时间:2015-02-11 19:32:19

标签: c# datagridview

我试图将数据从两个单独的表格显示到数据网格视图中,但我知道它可能不是为此目的而设计的,但我确定有办法停止它产生多个重复的行,如下所示;

enter image description here

以下是获取数据的代码(我打算稍后在代码中注释过滤器或特定搜索查询,这是今天的日子);

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();
    }
}

2 个答案:

答案 0 :(得分:0)

(从评论转换而来)

您的查询当前产生的是cross join。从本质上讲,这意味着您将从Bookings中获取每一行以及Patients中的每一行。

您可能想要的是inner join。内部联接允许您为从“右”表(在本例中为Patients)加入的记录指定谓词,因此对于每个Booking,您可以获得与Patient相关联的WHERE它基于外键。

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

答案 1 :(得分:-1)

我希望您需要将SQL更改为:

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