Lo he hecho con un MSHFLEXGRID pero no con un Data Grid pero no estaria mal si lo intentes mira este es el codigo.
Bien al poner el DatapIcker dentro de tu celda lo pones por default DatPicker.visible=false
asi cuando lo mandes llamar lo hace visible esta es la forma para mandar llamarlo
MSHFlexGridEdit FlexDetalle, DTPPICKER, 32
Sub MSHFlexGridEdit(ByRef MSHFlexGrid As Control, Edt As Control, KeyAscii As Integer)
' Usar el carácter escrito.
Select Case KeyAscii
' Un espacio significa modificar el texto actual.
Case 0 To 32
Edt = MSHFlexGrid
'cRenAnt = MSHFlexGrid.Row
' Otro carácter reemplaza el texto actual.
Case Else
Edt = Chr(KeyAscii)
Edt.SelStart = 1
End Select
' Mostrar Edt en la posición correcta.
Edt.Move MSHFlexGrid.Left - 20 + MSHFlexGrid.CellLeft, _
MSHFlexGrid.Top - 10 + MSHFlexGrid.CellTop, _
MSHFlexGrid.CellWidth + 5
Edt.Visible = True
'Y hacer que funcione.
Edt.SetFocus
End Sub