Hmmm. But I don't think you'd want to do this on a field changed event, since that may cause more update statements than you really need to run. I guess what I'm trying to understand is if you want to run the update statement any time a field changes in the table, or if when your users click the button you only want to run the update statements if fields have changed.
You could add another boolean field or attribute to your repeating group, called 'IsChanged' and then set rules on your fields in the repeating group to set that field to true when they change. Then, in your button code you could filter to only get the rows that have changed.
Looking at your original code, I do see a problem -- you are using absolute XPath to your fields instead of relative. I don't usually use MoveNext, so I'm not familiar with the syntax, but in C# using a foreach, I'd do something like this:
foreach(XPathNavigator row in rows)
{
Conn.Command = "UPDATE tblUnappliedCash SET " +
"DateOfTransaction ='" + row.SelectSingleNode("@DateOfTransaction", Nav) + "', " +
"CKAmount ='" + row.SelectSingleNode("@CKAmount", Nav) + "', " +
"CKNumber ='" + row.SelectSingleNode("@CKNumber", Nav) + "', " +
"ClientNumber ='" + row.SelectSingleNode("@ClientNumber", Nav) + "' " +
"WHERE (FACS_AC = '" + row.SelectSingleNode("@FACS_AC", Nav) + "')"
Conn.Execute()
}
That is just some quick copy/paste pseudo-code, so forgive me any obvious errors, just wanted to give you the idea. Your current code will loop through the rows and keep running update statements for the first values.