Сортировка по полю шаблона может быть невозможна - поле шаблона может быть связано с несколькими полями данных, и определить правильные поля сортировки сложно.
Если вы берете какое-то ограниченное представление, например, могут быть отсортированы только те поля шаблона, в которых метка и / или привязка привязаны к какому-либо полю данных, тогда подход будет
- .поле шаблона (
var tf = this.Columns[j] as TemplateField
) - Если да, возьмите шаблон (используйте свойство
ItemTemplate
) - Выполните рекурсивную итерацию через дочерние элементы управления шаблона, если вы найдете метку (или произнесите привязку)) затем проверьте его текстовое свойство для выражения привязки данных и для получения вашего поля данных.
Но такой подход не удастся для шаблона, такого как <img src="Some Icon" /><span><%# Eval("Name") %></span>
.
Еще одним вариантом описанной выше техники может быть использование шаблона элемента поля, а затем вызов метода Render
для получения шаблона HTML, а затем его можно проанализировать для поиска выражений привязки данных, а затем для определения полей данных.Однако у этого подхода есть свои подводные камни - например, шаблон, такой как <img src='<%# Eval("IconType") %>' /><span><%# Eval("Name") %></span>
, вероятно, сделает вышеупомянутую логику для сортировки по полю IconType вместо поля Name .
IMO, более надежный подход будет иметь свойство / метод в вашем элементе управления gridview, который будет принимать поля сортировки (если таковые имеются) для столбцов шаблона.