Этот вложенный материал для цикла - большой кошмар. Вы определенно хотите выйти из цикла циклического прохождения этих строк - много ненужных сравнений.
Похоже, у вас есть пара столбцов, которые вы сравниваете каждый раз - "CCY" и "Date". Рассматривали ли вы их использование в качестве основного ключа для таблицы? Если это имеет смысл для вашего сценария, вы можете сделать вещи значительно более эффективными.
Вы могли бы рассмотреть возможность сделать что-то вроде этого:
Определите, какие столбцы являются первичными ключами - здесь показано, что CCY и Дата для вас.
DataColumn[] keys = new DataColumn[2];
keys[0] = dataTable.column["CCY"];
keys[1] = dataTable.column["Date"];
dataTable.PrimaryKey = keys;
Затем, когда вы читаете новый DataSet - как бы вы это ни делали, вызывайте Merge для него следующим образом:
dataSet.Merge(newDataSet, false, MissingSchemaAction.Add);
Здесь предполагается, что dataTable - это таблицы [0] набора данных.
Это, по крайней мере для моей программы быстрого тестирования, объединит два набора данных и обновит измененные строки и добавит новые.
И я только что настроил свой DataGridView так:
dataGridView1.DataSource = dataSet.Tables[0];
Похоже, что обновление достаточно хорошо для моей тестовой программы.
Надеюсь, это поможет.