Как динамически изменить порядок столбцов в gridview - PullRequest
6 голосов
/ 23 января 2012

Подобные вопросы могут существовать, но ни один из них не кажется полезным.Поэтому я попытаюсь объяснить более конкретный случай и посмотреть, может ли кто-нибудь мне помочь:)

Вот в чем дело, у меня есть сетка с полями шаблонов, и я хочу позволить пользователю указать порядокэти столбцы показаны.Итак, пользователь создает представление и решает, какой столбец отображать первым, вторым и т. Д.

Поэтому в основном мне нужно изменить порядок столбцов сразу после загрузки сетки с данными.

Звучит легко, а?Ну, видимо, это не так.По крайней мере, я пока не смог этого достичь.

Некоторые примечания: - Конечно, для AutogenerateColumns установлено значение false.- Изменение порядка выбора столбцов sql не будет работать из-за предыдущего элемента.- И я бы не хотел генерировать столбцы по коду.

Есть идеи?

Ответы [ 2 ]

18 голосов
/ 23 января 2012

Вы можете изменить коллекцию Gridview's Columns в вашем коде.Таким образом, один из способов сделать это состоит в том, чтобы удалить столбец из его текущей позиции в коллекции, а затем снова вставить его в новую позицию.

Например, если вы хотите переместить второй столбец, чтобы он былПервый столбец, который вы можете сделать:

var columnToMove = myGridView.Columns[1];
myGridView.Columns.RemoveAt(1);
myGridView.Columns.Insert(0, columnToMove);

Если вам нужно переместить их все случайным образом, то вы можете попытаться клонировать коллекцию полей, очистить коллекцию в GridView, а затем снова вставить ихвсе в том порядке, в каком вы хотите, чтобы они были.

var columns = myGridView.Columns.CloneFields();
myGridView.Columns.Clear();
myGridView.Columns.Add(columns[2]);
myGridView.Columns.Add(columns[0]);
etc..

Я не уверен на 100%, будет ли все это работать ПОСЛЕ привязки к данным, поэтому, если нет причин не делать этого, я бы сделал этов Page_Init или где-то перед привязкой.

0 голосов
/ 28 ноября 2018

Я знаю, что это действительно старый вопрос, но предлагаемый ответ не решил проблему полностью.

После удаления / добавления динамического столбца ViewState для GridView не удастся.

Есливам нужно связать любое событие, например OnRowCommand и OnRowUpdating, такие события не будут запускаться.

Редактировать:

Просмотрите эту функцию, если вам нужны ответы.

Protected Overrides Function CreateColumns(dataSource As PagedDataSource, useDataSource As Boolean) As ICollection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...