Коллекция столбцов заполняется только в том случае, если AutoGenerateColumns = false, а столбцы создаются вручную.
Хороший обходной путь для этого - динамическое заполнение коллекции Columns до установки свойства DataSource и вызова DataBind ().
У меня есть функция, которая вручную добавляет столбцы на основе содержимого таблицы данных, которую я хочу отобразить. После того, как я это сделал (а затем установил DataSource и вызвал DataBind (), я могу использовать коллекцию Columns, и значение Count является правильным, и я могу включать и выключать видимость столбца, как я изначально хотел.
static void AddColumnsToGridView(GridView gv, DataTable table)
{
foreach (DataColumn column in table.Columns)
{
BoundField field = new BoundField();
field.DataField = column.ColumnName;
field.HeaderText = column.ColumnName;
gv.Columns.Add(field);
}
}