Andrew Baylis
Две насущные проблемы:
i) Вы проверяете строку за строкой, и если эта конкретная строка не совпадает, вы добавляете новую строку.
ii) добавление новой строки происходит внутри итерации коллекции строк - очень плохой ход!
Возможное решение
var found = false;
foreach (DataGridViewRow row1 in dgvmaingrid.Rows)
{
if (row1.Cells["PNAME"].Value.Equals(txtProdsearch.Text.Trim()) &&
row1.Cells["DESC"].Value.Equals(txtDesc.Text.Trim()))
{
row1.Cells["QTY1"].Value = (double.Parse(row1.Cells["QTY1"].Value.ToString()) +
double.Parse(txtQty.Text));
row1.Cells["NETAMT"].Value = Convert.ToDecimal(String.Format("{0:0.00}",
Convert.ToDecimal((double.Parse(row1.Cells["NETAMT"].Value.ToString()) +
double.Parse(txtNetPrice.Text))))).ToString();
found = true;
break;
}
}
if (!found)
{
//add new row ....
}