Как разрешить сортировку сетки?
У меня есть gridview и включена сортировка. При запуске приложения я нажимаю на первый столбец для сортировки. И я получаю эту ошибку: "Событие" gvOutlookMeldingen "GridView" Сортировка, которое не обрабатывалось ".
Это gridview:
<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>
Любая помощь приветствуется
Ответы
Ответ 1
Вам не хватает SortExpression
в BoundField
, как указано в других ответах.
Вы также используете TemplateField
, который в зависимости от того, что генерирует ваши данные, может потребовать ручной сортировки, кроме использования SortExpression
.
Если это так, то для сортировки вручную один метод заключается в добавлении обратного вызова OnSorting
к GridView
, SortExpression
в ваши поля и метода обратного вызова в вашем коде.
Это приведет к разметке и коду, сходному с (untested):
<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>
... и:
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.
}
}
Ответ 2
Этот код может помочь (для вас, ребята, он отправляется в этот старый пост):
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;
}
Ответ 3
Вам нужно установить атрибут SortExpression
столбцов, которые вы хотите сортировать. И вам нужно добавить обработчик события в событие Sorting
, чтобы сделать сортировку на вашем DataSource.
Для получения дополнительной информации см. эту статью MSDN или этот пример с сортировка и просмотр страниц.
Ответ 4
Я предполагаю, что источник данных вашего вида сетки является DataTable, поэтому я думаю, что вам нужно добавить
SortExpression="column name"
в каждом asp: Boundfield, который вам нравится сортировать,
например
<asp:BoundField DataField="Melder" SortExpression="Melder" HeaderText="Melder" />