only for the colored cell the returned string is empty
Everything is fine. GridCtrl keeps items as Value type. That means everything is converted to Value inside. You put AttrText into cell and got Value while retrieving. Just do casting to AttrText and read text member:
AttrText v = ValueTo<AttrText>(grid.Get(r, c));
String s = v.text;