Setzt man das SharePoint GridView (Microsoft.SharePoint.WebControls.SPGridView) in eigenen Seiten ein, und benutzt man für die Datenquelle die DataSource Eigenschaft
spGridView.DataSource = dataView;
dann zeigt das GridView beim sortieren keine Pfeile neben der sortierten Spalte an.
Dank Reflector stellt man fest, dass das SPGridView leider die Spalten Sortierung nur anzeigt wenn man als Datenquelle “DataSourceID” verwendet… Warum? Ich sehe da keinen Grund. Deshalb hier in etwa die Implementierung wie es das SPGridView auch intern macht:
public static void SetGridViewSortArrow(SPGridView spGridView, string sortExpression, SortDirection sortDirection) { // Show arrow on sorted column for (int colIndex = 0; colIndex < spGridView.Columns.Count; colIndex++) { DataControlField field = spGridView.Columns[colIndex]; if (((field == null) || string.IsNullOrEmpty(field.SortExpression)) || (field.SortExpression.ToLower(CultureInfo.CurrentCulture) != sortExpression.ToLower(CultureInfo.CurrentCulture))) continue; DataControlFieldHeaderCell cell2 = (DataControlFieldHeaderCell)spGridView.HeaderRow.Cells[colIndex]; Image image = new Image(); if (sortDirection == SortDirection.Ascending) image.ImageUrl = "/_layouts/images/sortup.gif"; else image.ImageUrl = "/_layouts/images/sortdown.gif"; image.Style[System.Web.UI.HtmlTextWriterStyle.MarginLeft] = "2px"; cell2.Controls.Add(image); break; } }
Aufgerufen wird das ganze dann im gridView_Sorting Event nach dem sortieren und vor allem nach dem
spGridView.DataBind();