Забавно, у меня была такая же проблема сегодня, и, как и вы, я нашел решение, приведенное выше, немного.
Вот кое-что, чем я доволен.
Во-первых, вынеобходимо использовать CSS Friendly Control адаптеры .Есть много других преимуществ, если вы используете GridView и у вас есть какой-либо класс.Это необходимо в этом случае, потому что он добавляет необходимые классы в ваш заголовок на основе свойств сортировки, чего нет в ASP.NET.
Вам не нужно менять код для добавления адаптеров, простопоместите их DLL в папку bin, а файл .browser
- в папку App_Browsers
(которую вам, возможно, потребуется добавить для этой цели).
(На боковом узле я обнаружил, что адаптерысломал некоторые из моих других макетов элементов управления (которые были стилизованы под разметку ASP.NET по умолчанию), поэтому я удалил все теги адаптера, кроме одного для GridView.)
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.GridView"
adapterType="CSSFriendly.GridViewAdapter" />
</controlAdapters>
</browser>
Теперь, чтобы перейти кхорошая частьЭтот бит jQuery в событии document.ready будет иметь желаемый эффект.
// Make the entire column header clickable, not just the text
$('#your-table thead th.sortable').each( function() {
var href = $('a', this).attr('href');
$(this).click( new Function(href.replace(/^javascript:/, '')) );
$('a', this).attr('href', 'javascript: return false;');
});
По сути, он удаляет javascript из ссылки, которую ASP.NET помещает в заголовок, который выглядит следующим образом
<a href="javascript:__doPostBack('ctl00$Form$id','Sort$Quantity')">Qty</a>
и помещает код в событие click
заголовка.Затем он отключает ссылку, чтобы пузырьки событий не вызывали конфликт.
Конечно, вам нужно добавить правила стиля, чтобы получить нужные визуальные подсказки.
Это решение ухудшаетхорошо, так как эти мифические браузеры, не поддерживающие JavaScript, будут просто демонстрировать поведение по умолчанию (когда вы должны нажимать на текст заголовка).
Надеюсь, это работает для вас!
РЕДАКТИРОВАТЬ: Я только что понял, что не очень внимательно прочитал ваш вопрос в первый раз.Мой код был разработан, чтобы получить поведение сортировки по умолчанию, когда вы щелкаете в любом месте заголовка (а не только в тексте ссылки).Но я думаю, это было достаточно близко:)
Кстати, чтобы получить данные в поле шаблона, похожее на то, что ASP.NET поместит туда, вы просто добавляете
<ItemTemplate>
<%# Eval("FieldName") %>
</ItemTemplate>
См.документация по форматированию и т. д.