Проверьте tc.Controls [2], когда вы находитесь в последнем вложенном foreach. Возможно ли, что ваш выпадающий список является чем-то другим, чем третий элемент управления?
Я не вижу причин, которые заставили бы его быть третьим контролем в этой Клетке.
Вам, вероятно, было бы лучше сделать что-то вроде этого:
if(tc.FindControl("ddl") != null)
{
Response.Write(((DropDownList)tc.FindControl("ddl")).SelectedItem.Text+" ");
}
вместо:
if (tc.Controls[2] is DropDownList)
{
Response.Write(((DropDownList)tc.Controls[0]).SelectedItem.Text+" ");
}