Yo tampoco soy muy experto ... pero te digo que en vez de utilizar un boton por celda yo utilizaría uno fuera del DBGrid. Y los cambios que quieras hacer sobre el registro seleccionado lo hagas en el evento OnClick de ese boton.
Para saber el registro que esta seleccionado simplemente tienes que ver donde esta el cursor del dataset que estes mostrando en el dbgrid, de manera que si por ejemplo quieres sacar un dato de un campo de ese dataset o modificarlo sería .....
Código:
if table1.state in [dsInsert,dsEdit] then
begin
Table1.fieldbyname('Apellidos').asstring:='HERNANDEZ FERNANDEZ';
Table1.post;
end;
Saludos, Tony