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,您可能会看到不同的性能。
我正在尝试将来自两个单独表的数据显示到数据网格视图中,我知道它可能不是为此目的而设计的,但我确信有一种方法可以阻止它产生多个重复项行如下所示;
这是获取数据的代码(我打算稍后在代码中添加一个过滤器或特定的搜索查询,今天是今天);
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,您可能会看到不同的性能。