Следующий код создаст разделенную строку DataFields (имен полей) только связанных полей в GridView. Не содержит полей шаблона, полей кнопок, ...
String boundFields = String.Empty;
for (int i = 0; i < grd.Columns.Count; i++)
{
DataControlField field = grd.Columns[i];
BoundField bfield = field as BoundField;
if (bfield != null)
boundFields += bfield.DataField + ",";
}
boundFields = boundFields.TrimEnd(',');
Следующая ссылка также говорит о поиске индекса столбца определенного DataField и может быть полезна: http://forums.asp.net/p/1076872/1584635.aspx