I managed to find a solution with a PaintCell override :
private void dataGridView2_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 1)
{
e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;
if(e.RowIndex == 0) {
e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.Single;
}
if (e.RowIndex < 1 || e.ColumnIndex < 0)
return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None;
}
else
{
e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.Single;
}
}
else
{
if ((e.Value?.ToString() == "") && (e.ColumnIndex == 3))
{
e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;
}
if ((e.ColumnIndex == 4))
{
if((e.RowIndex>=0)&&(dataGridView2[5,e.RowIndex].Value?.ToString()==""))
{
e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;
}
}
}
}