OnDrawColumn and OnDrawDataCell have a TGridDrawState State.
OnDataChange is in DataSource as was answered.
And yes you can't control TDBGrid unless you overload it with ancestors methods. That's why it is rarely used in real world tasks.