У вас есть несколько проблем в коде.
Первый: у вас есть значения идентификатора, отображаемые во 2-м столбце таблицы, и вы продолжаете цикл по всем столбцам просто для сравнения номера идентификатора.
Вы можете избежать внутреннего цикла for.
Второе: Также, как только вы обнаружите, что идентификационный номер уже существует в виде сетки, вы должны выйти из цикла.Нет смысла проходить по всем другим строкам, если вы знаете, что идентификатор существует.
В-третьих: как только вы вышли из цикла foreach, вы просто сравниваете число строк в GridView с 0 и пытаетесьдобавить строку в gridview.Но на самом деле то, что вам нужно проверить, если в цикле foreach найден идентификатор.И если он найден, вы не должны добавлять строку в сетку.
Таким образом, ваш код выглядит следующим образом.
int row = GridView1.Rows.Count - 1;
String val = GridView1.Rows[row].Cells[1].Text.ToString();
bool idFound = false;
foreach (GridViewRow rows in GridView2.Rows)
{
//Get the Text of 2nd Cell in cellText Variable.
String cellText = rows.Cells[1].Text;
if (val == cellText)
{
//Display error message and set idFound value to true.
lblError.Text = "ID number already assigned!!";
idFound = true;
}
}
//Check value of idFound, if it is false then add row to GridView1
if (!idFound)
{
DataRow dr = dt.NewRow();
dr["StudentName"] = GridView1.Rows[row].Cells[0].Text;
dr["IDNum"] = GridView1.Rows[row].Cells[1].Text;
dt.Rows.Add(dr);
}