I would create two tables:
grid_styles_header (id, grid_control_id, user_id)
grid_styles_cells (id, header_id, row_unique_identifier, column_name, color)
WHERE
header_id from cells references id from header
row_unique_identifier is your primary key for the query so you can know which row to update uniquely instead of using indexes.
column_name - datagrid column name or database column name so you know which column to affect regardless of column reordering some users might try.
I'm not aware of any built-in solution, but there may be third party controls that allow this.
If this helps please take time to accept the solution. Thank you.
Note: same saving logic goes for XML except you have node
<grid id="" user_id="">
<cell row_id="" column_name="" color="" />
<cell row_id="" column_name="" color="" />
<cell row_id="" column_name="" color="" />
</grid>
Good luck