Вы хотите избежать дублирования записей, отображаемых в виде таблицы данных, так почему бы не выбирать только эти отдельные записи при запросе данных.
string q = "SELECT DISTINCT c1, c2, c3 FROM mytable......";
И, скорее, итерируя по каждой строке в datatable, вы можете просто использовать DataSource
свойство DataTable
например,
SqlDataAdapter s = new SqlDataAdapter(q, c);
DataTable d = new DataTable();
s.Fill(d);
dgw.DataSource = dt;
Edit1:
Вы можете проверить строку перед ее добавлением в представление таблицы данных, например
foreach (DataRow r in d.Rows)
{
bool existingRow = dgw.Rows
.Cast<DataGridViewRow>().AsEnumerable()
.Any(x =>
Convert.ToString(x.Cells["Column1"].Value).Split(' ')[0] == r["c1"].ToString() &&
Convert.ToString(x.Cells["Column1"].Value).Split(' ')[1] == r["c2"].ToString() &&
Convert.ToInt32(x.Cells["Column2"].Value) == Convert.ToInt32(r["c3"])
);
if (!existingRow)
dgw.Rows.Add(r["c1"].ToString() + " " + r["c2"].ToString(), r["c3"]);
}
Где:
Column1
и Column2
- это столбцы в виде сетки данных.
c1
, c2
и c3
- столбцы в таблице данных