Вопрос или проблема
Я использую Telerik RadGrid для отображения списка доменных сущностей. В столбце подразумевается добавление (нет заголовка столбца, показывает иконку с треугольником/стрелкой, которая ничего не делает).
Я считаю, что этот столбец является “GridExpandColumn”
Telerik.Web.UI.GridExpandColumn Этот столбец появляется, когда у сетки есть иерархическая структура, чтобы облегчить функциональность развертывания/схлопывания. Столбец развертывания всегда размещается перед всеми другими столбцами содержимого сетки и не может быть перемещен.
Мои сущности действительно содержат одно свойство, которое является коллекцией, но это не то, что я когда-либо хотел бы показывать как детальный вид.
В результате экспериментов я смог определить, что если я не вызываю radGrid.DataBind() после установки radGrid.DataSource, этот столбец не показывается.
Кто-нибудь (а) знает, где/если это задокументировано и (б) есть ли другой способ (кроме создания DTO желаемых свойств без каких-либо коллекций или явного удаления столбца в коде за кулисами) предотвратить его создание? У меня AutoGenerateColumns=”false”, а список столбцов на странице aspx представляет собой комбинацию столбцов GridTemplateColumn и GridBoundColumn).
Еще один забавный момент: Мое приложение на самом деле состоит из двух приложений, одно на c# и одно на vb, приложение vb.net не имеет той же проблемы с лишним столбцом, несмотря на вызов radGrid.DataBind() сразу после установки источника данных.
Ответ или решение
При использовании Telerik RadGrid для отображения списка доменных сущностей возникает проблема, связанная с присутствием непонятного столбца "GridExpandColumn". Этот столбец, который не имеет заголовка и отображает иконку разворачивания/сворачивания, может вызывать путаницу, особенно если у вас нет намерения использовать иерархическую структуру данных. В данной статье мы подробно рассмотрим, почему возникает этот столбец и как с ним можно работать.
Причины появления GridExpandColumn
-
Иерархические структуры данных: По умолчанию, если ваш объект содержит коллекцию (например, список связанных сущностей), Telerik RadGrid может автоматически интерпретировать это как необходимость для развертывания/свертывания связанных данных. Хотя в вашем случае нет желания отображать подробности, RadGrid по-прежнему пытается включить эту функциональность.
-
Выбор источника данных: Когда вы привязываете источник данных к RadGrid и вызываете метод
DataBind
, RadGrid автоматически проверяет, есть ли у ваших сущностей связанные данные, и исходя из этого создает столбец для развертывания. -
Отсутствие документации: Некоторые аспекты работы RadGrid с иерархическими данными не всегда подробно документированы, что может вызвать недоумения у разработчиков.
Решения по устранению GridExpandColumn
Существует несколько способов решения данной проблемы, которые не требуют создания DTO или удаления столбца в коде:
-
Настройка источника данных: Если возможно, измените структуру своих доменных сущностей так, чтобы RadGrid не интерпретировал коллекцию как иерархическую. Это может быть достигнуто с помощью внедрения интерфейсов, которые скрывают связанные коллекции.
-
Настройка свойств RadGrid:
- Убедитесь, что свойство
AutoGenerateColumns
установлено вfalse
. Это предотвратит автоматическое создание любых дополнительных столбцов, включая GridExpandColumn. - Проверьте, установлено ли свойство
MasterTableView.ParentRelations.length
на пустое значение, чтобы явно указать, что нет родительских отношений.
- Убедитесь, что свойство
-
Управление событием PreRender: В обработчике события
PreRender
вы можете программно скрыть GridExpandColumn:protected void RadGrid1_PreRender(object sender, EventArgs e) { RadGrid radGrid = (RadGrid)sender; if (radGrid.MasterTableView.Columns.FindByUniqueName("GridExpandColumn") != null) { radGrid.MasterTableView.Columns.FindByUniqueName("GridExpandColumn").Visible = false; } }
-
Обратитесь к настройкам визуализации: Убедитесь, что никакие свойства визуализации не созданы для выполнения автоматического отображения GridExpandColumn для любых связанных структур.
О различиях между приложениями
Замеченный вами факт о том, что ваше приложение на VB.Net не демонстрирует данной проблемы, может быть связано с различиями в конфигурациях, версиях библиотек или даже настройках сборок проектов. Обратите внимание на то, какие версии Telerik используются в обеих сборках и сравните конфигурацию RadGrid в каждом приложении. Также стоит проверить, не используются ли разные механизмы привязки данных или настройки в момент выполнения.
Заключение
Существует множество факторов, способствующих появлению стобца GridExpandColumn в Telerik RadGrid. Понимание структуры ваших доменных сущностей и правильная настройка RadGrid являются ключевыми для устранения данной проблемы. Предложенные рекомендации и методы помогут вам оптимизировать отображение данных и избавить вас от нежелательных столбцов, сохраняя при этом эффективность вашего кода.