Fordtran Ответов: 1

Столбцы, недоступные в коде позади.


Я связываю элемент управления Gridview в коде позади с помощью VB.NET и с autogeneratecolumns=true, не создав никаких столбцов в исходном(html) коде или шаблонах файла .aspx.
Когда я запускаю его, я вижу оба столбца на веб-странице, но когда я хочу определить их ширину в коде позади, он не распознает никаких столбцов, вероятно, потому, что это делается на вложенном или защищенном уровне.
Как я могу установить видимость и ширину этих вложенных столбцов?
Спасибо

Что я уже пробовал:

Я пробовал десятикратные вещи, например, заранее создавать столбцы, устанавливать autogeneratecolumns=false и читать вашу превосходную статью о Gridview.

1 Ответов

Рейтинг:
1

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.

Вот именно! Надеюсь, вы найдете этот пример полезным!