Я нашел ответ Стива Хибберта очень полезным. Проблема, которую описывал OP, - это проблема AutoGeneratedColumns в GridView.
В этом случае вы можете указать, какие столбцы будут «видимыми», а какие будут скрыты при привязке таблицы данных в коде.
Например:
Gridview находится на странице следующим образом.
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" >
</asp:GridView>
А затем в коде, стоящем за процедурой PopulateGridView, вызывается во время события загрузки страницы.
protected void PopulateGridView()
{
DataTable dt = GetDataSource();
gv.DataSource = dt;
foreach (DataColumn col in dt.Columns)
{
BoundField field = new BoundField();
field.DataField = col.ColumnName;
field.HeaderText = col.ColumnName;
if (col.ColumnName.EndsWith("ID"))
{
field.Visible = false;
}
gv.Columns.Add(field);
}
gv.DataBind();
}
В приведенном выше описании GridView AutoGenerateColumns имеет значение False, а кодовая область используется для создания связанных полей. Одним из них является получение источника данных как источника данных через собственный процесс, который здесь я обозначил GetDataSource (). Затем один перебирает коллекцию столбцов данных. Если имя столбца соответствует заданным критериям, вы можете соответствующим образом установить видимое свойство связанного поля. Затем вы привязываете данные к виду сетки. Это очень похоже на AutoGenerateColumns = "True", но у вас есть критерии для столбцов. Этот подход наиболее полезен, когда критерии скрытия и скрытия основаны на имени столбца.