Ik was even snel een datagridje in elkaar aan het zetten, met sorteermogelijkheden. Ik gebruik hiervoor template column met een sortexpression:
code:
Als ik nu op een kolom klik, wordt de volgende code uigevoerd:1
2
3
4
5
6
7
8
| <asp:TemplateColumn SortExpression="contractNumber">
<HeaderTemplate>
<asp:LinkButton ID="sortButton1" CommandName="sort" Runat="server">Contractnumber</asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval( Container.DataItem, "contractNumber" ) %>
</ItemTemplate>
</asp:TemplateColumn> |
code:
Tot mijn verbazing bleek het datagrid niet te sorteren, dus ben ik er met de debugger een aantal keren doorheen gelopen. Hieruit bleek dat e.SortExpression altijd een lege string is. Als ik hyperlinkcolumns of boundcolumns gebruik krijgt e.SortExpression wel een waarde. In de asp.net quickstart staat ook een voorbeeld van een datagrid dat sorteerbaar is met een templatecolumn ([url=http://localhost/quickstart/aspplus/samples/webforms/ctrlref/webctrl/datagrid/doc_datagrid.aspx#sorting]hier[/url] als je 'm geinstalleerd hebt). Hier ben ik ook met de debugger doorheen gelopen, en e.SortExpression van het templatecolumn is ook hier leeg, maar het datagrid sorteert wel!. Hier na heb ik een tweede templatecolumn aan dit datagrid toegevoegd, en toen sorteerde deze ook niet meer. Als laatste heb ik in mijn eigen project alle templatecolumns vervangen door boundcolumns, op 1 na. Nu sorteerd het datagrid wel perfect! Blijkbaar kan je maar maximaal 1 templatecolumn gebruiken als je erop wilt sorteren? Weet iemand hier meer over te vertellen?
1
2
3
4
5
| private void contractGrid_SortCommand(object source, DataGridSortCommandEventArgs e)
{
ViewState[ "sortField" ] = ( string )e.SortExpression;
BindContractGrid();
} |
[ Voor 5% gewijzigd door sig69 op 04-11-2004 10:10 ]