Я чувствую, что это несколько уродливый ответ, но он выполняет работу без каких-либо серьезных усилий. Как только все проверено и вызвана функция EndEdit источника привязки, вы можете проверить DataSet на наличие измененных строк.
Before_Update обрабатывает эту логику и просматривает каждую строку, если были внесены изменения, внося необходимые изменения в столбцы перед вызовом UpdateAll.
Проверка на измененные строки -
http://msdn.microsoft.com/en-US/library/czb9z269%28v=VS.80%29.aspx
// Save event
private void clientBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.clientBindingSource.EndEdit();
Before_Update();
this.tableAdapterManager.UpdateAll(this.dP_TestDataSet);
}
// Place logic in here to modify records if they are changed
private void Before_Update()
{
if (dP_TestDataSet.HasChanges())
{
for (int tRow = 0; tRow < dP_TestDataSet.Tables["Client"].Rows.Count; tRow++)
{
// Modification Logic
if (dP_TestDataSet.Tables["Client"].Rows[tRow].RowState == DataRowState.Modified)
{
dP_TestDataSet.Tables["Client"].Rows[tRow]["userID"] = Program.SYSNG.UserID;
}
// Addition Logic
if (dP_TestDataSet.Tables["Client"].Rows[tRow].RowState == DataRowState.Added)
{
// Addition Logic
// ...
}
// Other RowStates such as Deleted, Detatched or Unchanged work here too
}
}
}
Это успешно решает мою проблему, хотя я надеюсь, что кто-то придет, чтобы превзойти этот ответ. Я чувствую, что выполняю дополнительную работу, которую фреймворк спрятал где-то под простынями, и надеюсь, что кто-нибудь сможет дать мне представление об этой функции.