I had exactly the same issue.
The only way that I found for binding a DataTextField of GridHyperLinkColumn to a dictionary value is on the ItemDataBound event of the grid.
The following example is based on your sample structure:
...
// set temporary the ID as a text
col.Text = item.OID.ToString();
YourGrid.ItemDataBound += OnYourGridItemBound;
...
private static void OnYourGridItemBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
GridDataItem dataBoundItem = e.Item as GridDataItem;
if (dataBoundItem != null)
{
foreach (TableCell cell in dataBoundItem.Cells)
{
if (cell.Controls.Count > 0)
{
var link = cell.Controls[0] as HyperLink;
if (link != null)
{
var dataItem = dataBoundItem.DataItem as MyClass;
var id = link.Text;
link.Text =
dataItem.AnotherObject[id].Person.FormattedName;
}
}
}
}
}
I hope this will work for you.