Don't have time for a thorough review, but a few points...
sum_of_sum = md5_hash('|'.join(str(i) for i in list_of_row_md5h))
>
I think you only want to hash individual records and check individual
records when they are submitted (probably via an ajax submission). There's
no reason to reject an update for one record just because another record
has changed (which is what will happen if you create a single hash for the
entire set of records).
> form._formkey = sum_of_sum* # does notting here...*
>
Although the input field is named "_formkey", the form attribute is
form.formkey, not form._formkey. Also, the _formkey isn't created until you
call .accepts or .process, so you have to change the formkey after
form.process.
form.process(detect_record_change=True)
>
I do not think you will be able to use the built-in detect_record_change
functionality with SQLFORM.factory. I was suggesting you manually code your
own by hashing the records and comparing the hashes upon submission.
Anthony