J'ai une vue de grille et activé le tri. Lors de l'exécution de l'application, je clique sur la première colonne pour trier. Et je reçois cette erreur: "Le tri d'événement déclenché par GridView 'gvOutlookMeldingen' qui n'a pas été géré."
Voici la grille:
<asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged">
<Columns>
<asp:TemplateField HeaderText="Melder" ItemStyle-HorizontalAlign="Center" SortExpression="Melder">
<HeaderStyle BorderColor="#1A3491" Width="130px"></HeaderStyle>
<ItemStyle Height="20px" HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<%# (string)Eval("Melder") %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" />
<asp:TemplateField HeaderText="Omschrijving">
<ItemTemplate>
<div style="overflow:auto; width: 500px; height: 200px;">
<asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" />
<asp:BoundField DataField="OutlookID" HeaderText="OutlookID" />
</Columns>
</asp:GridView>
Toute aide est appréciée
Il vous manque SortExpression
dans vos BoundField
comme mentionné dans les autres réponses.
Vous utilisez également un TemplateField
qui, selon ce qui génère vos données, peut nécessiter un tri manuel au-delà de l'utilisation de SortExpression
.
Si tel est le cas, pour trier manuellement, une méthode consiste à ajouter un rappel OnSorting
aux GridView
, SortExpression
à vos champs et une méthode à rappeler dans votre code -derrière.
Cela entraînerait un balisage et un code similaires à (non testés):
<asp:GridView ID="gvOutlookMeldingen" runat="server"
AllowSorting="True"
OnSorting="gvOutlookMeldingen_Sorting"
AutoGenerateColumns="False"
AutoGenerateSelectButton="True"
onselectedindexchanged="GridView_SelectedIndexChanged">
<Columns>
<asp:BoundField DataField="Melder" HeaderText="Melder" SortExpression="Melder" />
<asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" SortExpression="Onderwerp" />
<asp:TemplateField HeaderText="Omschrijving" SortExpression="Omschrijving">
<ItemTemplate>
<div style="overflow:auto; width: 500px; height: 200px;">
<asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" SortExpression="Meldingsdatum" />
<asp:BoundField DataField="OutlookID" HeaderText="OutlookID" SortExpression="OutlookID" />
</Columns>
</asp:GridView>
...et:
protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e)
{
switch (e.SortExpression)
{
case "Melder":
if (e.SortDirection == SortDirection.Ascending)
{
gvOutlookMeldingen.DataSource = // Asc query for Melder field;
gvOutlookMeldingen.DataBind();
}
else
{
gvOutlookMeldingen.DataSource = // Desc query for Melder field ;
gvOutlookMeldingen.DataBind();
}
break;
// case statements for your other fields.
}
}
Ce code pourrait aider (pour vous les gars googler ce vieux post):
protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dt = (DataTable)Session["mySessionStoredTable"];
dt.DefaultView.Sort = e.SortExpression // column name
+ " " + SortDir(e.SortExpression); // sort direction
gv.DataSource = dt;
gv.DataBind();
}
private string SortDir(string sColumn)
{
string sDir = "asc"; // ascending by default
string sPreviousColumnSorted = ViewState["SortColumn"] != null
? ViewState["SortColumn"].ToString()
: "";
if (sPreviousColumnSorted == sColumn) // same column clicked? revert sort direction
sDir = ViewState["SortDir"].ToString() == "asc"
? "desc"
: "asc";
else
ViewState["SortColumn"] = sColumn; // store current column clicked
ViewState["SortDir"] = sDir; // store current direction
return sDir;
}
Vous devez définir l'attribut SortExpression
des colonnes sur lesquelles vous souhaitez trier. Et vous devez ajouter un gestionnaire d'événements à l'événement Sorting
pour que le tri fonctionne sur votre DataSource.
Pour plus d'informations, consultez cet article MSDN , ou cet exemple avec tri et pagination .
Je suppose que la source de données de votre vue de grille est un DataTable, donc je pense que vous devez ajouter
SortExpression="column name"
dans chaque asp: Boundfield que vous aimez pouvoir trier,
par exemple
<asp:BoundField DataField="Melder" SortExpression="Melder" HeaderText="Melder" />