Los desarrolladores de software tienen esa capacidad de decidir que estrategia seguir para sus programas, además eligen la más apropiada, eficaz y eficiente para que la aplicación no tenga retrasos en cuanto a la actualización de sus datos.
Las dos estrategias que has analizado son lo suficientemente apropiadas para en tu caso, hasta podrían haber muchas más para hacer que el software tenga una usabilidad apropiada para cualquiera que lo utilice; analizando un poco, la estrategia más adecuada sería la opción 2 ya que como expones, los datos estarán directamente incrustados (por decirlo de ese modo) a la base de datos PERO algo que no comprendí muy bien, ¿Los dos DataGridView están aparte de los botones, es decir, se encuentran en la pantalla misma y no en cada registro? Esto lo digo porque imagino que tu intención es modificar un registro a la vez pues no es así, ya que el usuario final puede modificar N registros y al momento de guardar, hay un pequeño lío en cuanto a actualizar varios registros a la vez y debas utilizar JOIN para guardar el arreglo de filas modificadas (Link de ayuda http://www.dataprix.com/blog-it/bases-datos/update-select-registros-agregados-sqlserver ) y sea un poco lioso este tema pero bueno, ya es decisión suya.
Aquí te expondré otras estrategias haber cual te resulta más adecuada o puedes combinarles con las que ya tienes:
- Implementar otras tres columnas con botones en cada registro (Esto se puede hacer mediante los atributos del DataGridView y cada columna contendría el botón correspondiente a Actualizar, Eliminar o Cancelar -Este último estaría inhabilitado hasta seleccionar Actualizar-) y al momento de guardar o eliminar mostrar un MessageBox para confirmar el guardado o el eliminado del registro, esta es una opción ideal para evitar guardar varios registros a la vez y acumulación de tareas en el proceso de transacción.
- Inhabilitar los atributos del DataGridView de AllowUserTo (AddRows, DeleteRows) y habilitar ReadOnly para que el usuario no pueda modificar las celdas de cada registro; para esto debería diseñar una interfaz de ingreso con GroupBox o mediante una pantalla emergente para el Ingreso de nuevos registros o el Actualizado del mismo, para que los DataGridViews solo sean para el visualizamiento de los datos modificados o agregados (Si esta opción le parece adecuada).
- Aplicando la primera opción pero al momento de intervenir en el DataGridView de un registro, inhabilitar los demás registros para que no haya registros sin guardar o similares hasta que el registro modificado tenga alguna acción valida para habilitar los demás registros (Actualizar, Eliminar o Cancelar).
Le comento, todo proceso que usted haga sea como sea, debe de recargar los datos en el DataGridView ya que a veces los datos que se guardan no quedan reflejados directamente entre la base de datos y el Grid, de los cuales es recomendable volver a cargar los datos de la tabla en cada DataGridView.
Espero que lo expuesto aquí le sea de utilidad, le deseo lo mejor y saludos!