Vincent Maverick Durano
Вы не можете "напрямую" спрятаться AutoGenerateColumns
в наших кодах используется приведенный ниже код:
GridView1.Columns[index].Visible = false;
Почему?
Это происходит потому, что автоматически сгенерированные столбцы не добавляются в GridView
Columns
коллекция. Использование приведенного выше кода даст вам "index was out of range error".
В качестве обходного пути, вот несколько способов, как скрыть определенный столбец в GridView
с AutoGenerateColumns
установлен в TRUE
:
Вариант 1: Использование Cells
индекс
<code></code>
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//Just changed the index of cells based on your requirements
e.Row.Cells[0].Visible = false;
}
Вариант 2: циклическое прохождение
GridView
Row
Коллекции элементов управления
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//Just changed the index of cells based on your requirements
foreach (TableRow row in GridView1.Controls[0].Controls)
{
row.Cells[0].Visible = false;
}
}
Вы можете использовать приведенные выше параметры для скрытия
Columns
если вы уверены в том, что порядок
Columns
В вашем
GridView
Обратите внимание, что автоматически генерируемые столбцы будут отображать все столбцы из
DataSource
, поэтому вы должны быть осторожны при использовании индекса для скрытия
Columns
.
Вариант 3: циклическое прохождение
GridView
Cells
Как вы, возможно, знаете,
GridView
клетки состоят из различных
DataControlFields
и в основном
AutoGenerated
использование полей
BoundField
для отображения данных. В этом случае мы можем сделать петлю через
cells
генерируется с помощью
GridView
и бросил клетку в ад.
DataControlFieldCell
введите, чтобы получить
ContainingField
тогда мы можем бросить это
ContainingField
К
BoundField
так что мы можем проверить
DataField
используется в конкретном случае
AutoGenerated
BoundField
и спрятать их, используя свой
Visible
собственность.
Чтобы сделать его более понятным, вы можете проверить этот кодовый блок ниже:
Protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//Just set the Column Name that you wish to hide based on your requirements
foreach (TableCell cell in e.Row.Cells)
{
BoundField field = (BoundField)((DataControlFieldCell)cell).ContainingField;
if (field.DataField == "ColumnName")
{
field.Visible = false;
}
}
}
Как вы можете видеть, мы проверили наличие
ColumnName
во-первых, прежде чем скрывать столбец вместо использования индекса
Column
.
То
ColumnName
выше указано поле из вашего
DataSource
что ты хочешь скрыть. Вы можете использовать эту опцию для скрытия столбцов, если не знаете последовательность столбцов из списка.
DataSource
.
Вот именно! Надеюсь, вы найдете этот пример полезным!