В проекте C# WinForms, который подключается к базе данных PostgreSQL с использованием инфраструктуры Npg sql, мне нужно разрешить пользователю вносить изменения в любом месте DGV, а затем по нажатию кнопки мне нужно инициировать процесс, который находит эти изменения и фиксирует их в базе данных.
В настоящее время у меня есть приведенный ниже код, который проходит через DataTable DGV, в каждом DataRow он проходит через каждый столбец и сравнивает исходное значение DataRowVersion с предлагаемым значением:
private void CheckDgvForChangedCells(DataTable dt)
{
string strOriginalValue;
string strEnteredValue;
int intRowIndex;
int intColumnIndex;
for (intRowIndex = 0; intRowIndex <= dt.Rows.Count - 1; intRowIndex++)
{
for (intColumnIndex = 0; intColumnIndex <= dt.Columns.Count - 1; intColumnIndex++)
{
DataRow drCurrRow = dt.Rows[intRowIndex];
strOriginalValue = drCurrRow[intColumnIndex, DataRowVersion.Original].ToString();
strEnteredValue = drCurrRow[intColumnIndex, DataRowVersion.Proposed].ToString();
if (strOriginalValue != strEnteredValue)
{
// Do something
}
}
}
}
Таблица базы данных, которая заполняет DataTable, в настоящее время насчитывает чуть более 1400 строк, которые будут расти со временем, вместе с 7 столбцами, и когда я собирал это вместе, мне было интересно, если это лучше / Наиболее эффективный способ найти все измененные значения и обновить базу данных, как я нахожу каждое из них.
[ОБНОВЛЕНИЕ]
Согласно предложению Стива в комментариях, я пытался работать с DataTable.GetChanges()
, но я я не вижу, как получить только столбцы в данной строке, которые изменились.
Я изменил v arious ячейки в трех разных строках и dtChanges.Rows.Count
было 3, как и ожидалось, но там находится весь ряд с новыми значениями в отредактированных ячейках. Я не вижу, как использовать dtChanges
для обновления базы данных только с измененными столбцами соответствующих измененных столбцов.