Casimiro intenta decirte que los controles visuales simplemente se limitan a mostrar datos
Los datos propiamente dichos estan en un TDataSet (ni siquiera un ADOQuery, que es una implementacion; TDataSet es abstracto)
Cuanto mas abstractas sean las clases que usas, mas facil es de realizar mantenimientos mas adelante a tu codigo
Cuanto mas concretas sean las clases que usas, es mas dificil porque al "atarte" a una implementacion particular, si luego tenes que cambiar a otra, podes perder algunas caracteristicas o te obliga a cambiar la forma de hacer las cosas
En el DBGrid no tenes la propiedad FieldByName porque es de un DataSet
Osea, en algun momento conectaste tu DBGrid a un DataSet usando de intermediario un DataSource. Tenes que tener muy presente que haya un DataSource en el medio, el DataSet que conoce el Grid es uno solo. En alguna parte de tu codigo estas creando esa relacion
Código Delphi
[-]
AlgunDataSource.DataSet := TuDataSet/Query/etc;
DBGrid.DataSource := AlgunDataSource;
Si haces la prueba de cerrar "TuDataSet/Query/etc" o modificar un campo, o lo que fuera, el Grid se "actualiza"
Por lo tanto para acceder a los datos del Grid, la forma correcta es usando el DataSet.