Eine DBGrid stellt ja erstmal nur Daten dar, die aus einer Datenmenge kommen, die ihr über eine DataSource zugewiesen ist (schwieriger Satz, ich weiß).
Also so: DataSet -> DataSource -> DBGrid
Nun musst Du ergo den umgekehrten Weg gehen, um die dahinterliegenden Daten zu erfragen(DBGrid.DataSource.DataSet). AFAIR besitzt ein DataSet eine Eigenschaft Fields, hier solltest Du fündig werden.
Ceterum censeo: lass den PK vom
DBMS setzen, dann bist Du auf der sicheren Seite