Как скрыть столбцы в ASP.NET GridView с автоматически сгенерированными столбцами?

GridView1. Столбцы. Количество всегда является нулем даже SqlDataSource1. DataBind ();

Но Сетка в порядке

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

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

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

GridView1.Columns[i].Visible = false;

Я не могу использовать его из-за GridView1. Столбцы. Количество 0.

Таким образом, как я могу скрыть их?

35
задан Eilon 19 January 2010 в 06:44
поделиться

5 ответов

Сопоставимый интерфейс содержит метод compeyTo (obj) , который принимает только один аргумент и сравнивает себя с другим экземпляром или объектами того же класса.

Интерфейс Comparator содержит метод compare (obj1, obj2) , который принимает два аргумента и сравнивает значение двух объектов из одного или разных классов.

-121--728616-

У меня та же проблема. Ну, я обновляю старый проект, используя Qt4.4 и VC2003, и я использую QwtPlot вместо QwtDial. Ошибка:

LNK2001: неразрешенный внешний символ «public: static struct QMetaObject const QwtPlot:: startMetaObject» (? startMetaObject @ QwtPlot @ @ 2UQMetaObject @ @ B)

Только это. Больше ничего. Я нашел ссылки на форум, указывающие на проблемы с отладкой/выпуском миксапов и, возможно, что-то общего с удалением плагина Qt Designer.

Это, кажется, работает на меня: Добавьте строку «DEFINES + = QWT_DLL» в верхнюю часть файла project.pro.

qmake project.pro

nmake release

-121--4667868-

Попробуйте поместить событие e.Row. Камеры [0] .Visible = false; в событие RowCreated вашей сетки.

protected void bla_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[0].Visible = false; // hides the first column
}

Таким образом он автоматически скрывает весь столбец.

У вас нет доступа к созданным столбцам через grid.Columns [i] в событии DataBound вида сетки.

47
ответ дан 27 November 2019 в 06:49
поделиться

В идеале вы должны разрешать только то, что вам нужно. Это означает, что если вы уверены, что конкретный столбец (скажем, столбец имени пользователя) никогда не будет длиннее 20 символов, использование VARCHAR (20) или VARCHAR (MAX) позволяет базе данных оптимизировать запросы и структуры данных.

От MSDN: http://msdn.microsoft.com/en-us/library/ms176089.aspx

Variable-length, non-Unicode character data. n can be a value from 1 through 8,000. max indicates that the maximum storage size is 2^31-1 bytes.

Вы действительно собираетесь приблизиться к 2 ^ 31-1 байт для этих столбцов?

-121--849986-

В самом низу их сайта имеется несколько ссылок на учебные пособия.

Я думаю, вы найдете этот Nettuts + один значение в игре с 960.

-121--2414495-

Необходимо выполнить команду GridView1.Columns [i] .Visible = false; после того, как сетка будет привязана к базе данных.

2
ответ дан 27 November 2019 в 06:49
поделиться

Поскольку при надлежащем сотрудничестве ОС, 0 инициализации статики и глобалов может быть реализован без накладных расходов времени выполнения.

-121--951986-

Я недавно создал один, который довольно прост в использовании:

https://github.com/lookfirst/sardine

-121--1487793-

Примечание: Это решение работает только в том случае, если столбцы GridView известны заранее.

Похоже, что используется GridView с AutoGenerateColumns = true , что является значением по умолчанию. Рекомендуется установить значение AutoGenerateColumns = false и добавить столбцы вручную:

<asp:GridView runat="server" ID="MyGridView"
    AutoGenerateColumns="false" DataSourceID="MySqlDataSource">
    <Columns>
        <asp:BoundField DataField="Column1" />
        <asp:BoundField DataField="Column2" />
        <asp:BoundField DataField="Column3" />
    </Columns>
</asp:GridView>

И включать только значение BoundField для каждого поля, которое требуется отобразить. Это обеспечит максимальную гибкость отображения данных.

10
ответ дан 27 November 2019 в 06:49
поделиться

У меня была такая же проблема - мне нужно, чтобы AutogenerateColumns моего элемента управления GridView был "true", потому что он связан с источником данных SQL, и поэтому мне нужно скрыть некоторые колонки, которые не должны отображаться в элементе управления GridView.

Для этого нужно добавить некоторый код в событие '_RowDataBound' вашего GridView, например, такой (предположим, что ID вашего GridView = 'MyGridView'):

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[<index_of_cell>].Visible = false;
    }
}

Это отлично справится с задачей ;-)

.
5
ответ дан 27 November 2019 в 06:49
поделиться

@nCdy: index_of_cell следует заменить на целое число, соответствующее номеру индекса ячейки, которую вы хотите скрыть в коллекции .Cells.

Например, предположим, что в вашем GridView представлены следующие столбцы:

КОНТАКТНОЕ ИМЯ | КОНТАКТНЫЙ НОМЕР | КЛИЕНТСКИЙ ИД | АДРЕС СТРОКИ 1 | ПОСТ-КОД

И вы хотите, чтобы столбец CUSTOMERID не отображался. Поскольку индексы коллекций основаны на 0, индекс вашего столбца CUSTOMERID -..........? Правильно, 2!!! Очень хорошо. Теперь... угадайте, что нужно вставить туда вместо 'index_of_cell'?

1
ответ дан 27 November 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: