Как скрыть столбцы в ASP.NET GridView с автоматически сгенерированными столбцами? - PullRequest
32 голосов
/ 19 января 2010

GridView1.Columns.Count всегда равен нулю, даже SqlDataSource1.DataBind ();

Но с сеткой все в порядке

Я могу сделать

for (int i = 0; i < GridView1.HeaderRow.Cells.Count;i++)

Я переименовываю заголовки запросов здесь. но

GridView1.Columns[i].Visible = false;

Я не могу использовать его, потому что GridView1.Columns.Count равен 0.

Так как я могу их спрятать?

Ответы [ 12 ]

0 голосов
/ 04 августа 2016

Я нашел ответ Стива Хибберта очень полезным. Проблема, которую описывал 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", но у вас есть критерии для столбцов. Этот подход наиболее полезен, когда критерии скрытия и скрытия основаны на имени столбца.

0 голосов
/ 21 августа 2015

Как говорили другие, событие RowDataBound или RowCreated должно работать, но если вы хотите избежать объявления событий и поместить весь код чуть ниже вызова функции DataBind, вы можете сделать следующее:

GridView1.DataBind()
If GridView1.Rows.Count > 0 Then
    GridView1.HeaderRow.Cells(0).Visible = False
    For i As Integer = 0 To GridView1.Rows.Count - 1
        GridView1.Rows(i).Cells(0).Visible = False
    Next
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...