Hi John,
Because I already answered your prev post but it did not help, I try it
again.
It was my mistake that did not take your sentence "But, my dataGrid in
this case is an overridden System.Windows.Forms.DataGrid class" into
account.
Because it is "internal", not "protected", property, and your assembly
is different from System.Windows.Form.dll, the answer is no.
You can try this snippet instead:
MethodInfo mi = dataGrid.GetType().BaseType.GetMethod(
"get_DataGridRows",
BindingFlags.Instance | BindingFlags.NonPublic);
Array dataGridArray = (Array) mi.Invoke( dataGrid, null );
Note I add "BaseType" after GetType() because your data grid is
directly derived from System.Windows.Forms.DataGrid. If not, you can
call continuously calling BaseType until you get to
System.Windows.Forms.DataGrid, like this:
Type t = dataGrid.GetType().BaseType;
while (t != typeof(DataGrid))
{
t = t.BaseType;
}
MethodInfo mi = t.GetMethod("get_DataGridRows",
BindingFlags.Instance | BindingFlags.NonPublic);
Array dataGridArray = (Array) mi.Invoke( dataGrid, null );
Hope this time I can help,
Let me know if it still does not

Regards,
Thi