Есть несколько способов добиться того, о чем вы, я полагаю, просите.
Первый способ - это фактически удалить элемент из первого списка после его добавления во второй. Это препятствует тому, чтобы пользователь даже пытался добавить более одного, и гарантирует, что представляемый интерфейс имеет контекстный смысл.
С учетом сказанного, чтобы точно ответить на вопрос, поскольку вы фактически клонируете строку, выМожно выполнить сравнение, чтобы определить, было ли оно уже добавлено:
foreach (DataGridViewRow row in this.dataGridEquipamento.SelectedRows)
{
object[] rowData = new object[row.Cells.Count];
for (int i = 0; i < rowData.Length; ++i)
{
rowData[i] = row.Cells[i].Value;
}
if (!this.dataGridEmprestimo.Rows.Contains(rowData))
{
this.dataGridEmprestimo.Rows.Add(rowData);
}
}
В плане оптимизации вам может потребоваться проверить только одно значение из строки - например, Id - чтобы определить, было ли оно ужесуществует. Вы могли бы написать простой метод для возврата количества строк с этим идентификатором. Если их нет или если число меньше максимально допустимого, вы можете добавить эту строку.
public int CountObjectsInRows(string idValue)
{
int count = 0;
if (string.IsNullOrEmpty(idValue))
{
return count;
}
foreach (DataGridViewRow row in this.dataGridEquipamento.SelectedRows)
{
if (row.Cells[0].Value.ToString() == idValue)
{
count++;
}
}
return count;
}
Вы можете использовать этот метод вместо вышеупомянутого "this.dataGridEmprestimo". Rows.Contains (rowData) "условие.
foreach (DataGridViewRow row in this.dataGridEquipamento.SelectedRows)
{
object[] rowData = new object[row.Cells.Count];
for (int i = 0; i < rowData.Length; ++i)
{
rowData[i] = row.Cells[i].Value;
}
if (CountObjectsInRows(rowData.Cells[0].ToString()) == 0)
{
this.dataGridEmprestimo.Rows.Add(rowData);
}
}