Take a look at the Microsoft KB article:
HOW TO: Extend the Windows Form DataGridTextBoxColumn to Display Data From Other Tables by Using Visual C# .NET (Article ID: 319076)
or
HOW TO: Extend the Windows Form DataGridTextBoxColumn to Display Data From Other Tables by Using Visual Basic .NET (Article ID: 319082).
It subclasses a DataGridColumnStyle and overrides GetColumnValueAtRow, Commit and ReadOnly to implement this behavior.
Contributed from George Shepherd's Windows Forms FAQ