У меня есть ListView - связанный с datatable - содержащий несколько страниц хронологических элементов.Сортировка ASP.NET 4.0 (C#) ListView
Хотелось бы иметь возможность сортировать их по возрастанию и убыванию.
В моей <layouttemplate>
я следующее:
<asp:linkbutton runat="server" id="SortbyYear" commandname="Sort" commandargument="Year">Year</asp:linkbutton>
Когда я нажимаю на это, я получаю сообщение об ошибке от PageRequestManager что onsorting не обрабатывается.
Поэтому я добавил следующее к моему <asp:listview ... >
:
onsorting="HistoryList_Sorting"
Что я на самом деле положил в этом методе в код, чтобы получить сортировку работать? Я просто пытаюсь переключить столбец «Год» туда и обратно между восходящим и нисходящим.
protected void HistoryList_Sorting(object sender, ListviewSortEventArgs e)
{
// WHAT GOES HERE???
}
UPDATE:
Ниже то, что я имею в моей странице ASPX:
<asp:listview id="HistoryList" runat="server" convertemptystringtonull="False" onlayoutcreated="HistoryList_LayoutCreated" ondatabound="HistoryList_DataBound" onsorting="HistoryList_Sorting" >
<layouttemplate>
<table>
<tr>
<th><asp:linkbutton runat="server" id="SortByYear" commandname="Sort" commandargument="Year"><asp:literal runat="server" id="Year" /></asp:linkbutton></th>
<th><asp:literal runat="server" id="Event" /></th>
</tr>
<tr id="ItemPlaceholder" runat="server"></tr>
</table>
</layouttemplate>
<itemtemplate>
<tr class="row">
<td class="history-year-column"><%# Eval("Year") %></td>
<td><%# Eval("Description") %></td>
</tr>
</itemtemplate>
<alternatingitemtemplate>
<tr class="row-alternate">
<td class="history-year-column"><%# Eval("Year") %></td>
<td><%# Eval("Description") %></td>
</tr>
</alternatingitemtemplate>
</asp:listview>
Ниже то, что я имею в моей странице CS:
#region " Declare: Shared Classes "
private Localization localizeSite = new Localization();
private DataXML xmlData = new DataXML();
public DataTable HistoryDataTable { get; set; }
#endregion
#region " Page: PreInit "
private void Page_PreInit(object sender, System.EventArgs e)
{
Page.MasterPageFile = localizeSite.LoadMasterPage(Page.Master.AppRelativeVirtualPath);
}
#endregion
#region " Page: Load "
protected void Page_Load(object sender, System.EventArgs e)
{
Edition edition = new Edition();
ContentTracking.Text = edition.GetEdition(Page.AppRelativeVirtualPath);
//// LOCALIZE THE WEB SITE CONTENT
Heading.Text = localizeSite.LocalizeText(Page, "Heading.Text");
Body.Text = localizeSite.LocalizeText(Page, "Body.Text");
AdNetworkTracking.Text = localizeSite.LocalizeText(Page, "AdNetworkTracking.Text");
}
#endregion
#region " Handle: OnLayoutCreated "
protected void HistoryList_LayoutCreated(object sender, System.EventArgs e)
{
((Literal)HistoryList.FindControl("Year")).Text = localizeSite.LocalizeText(Page, "Year.Text");
((Literal)HistoryList.FindControl("Event")).Text = localizeSite.LocalizeText(Page, "Event.Text");
}
#endregion
#region " Handle: Sorting "
public String SortExpression
{
get
{
return (string)ViewState["SortExpression"];
}
set
{
ViewState["SortExpression"] = value;
}
}
protected void HistoryList_Sorting(object sender, ListViewSortEventArgs e)
{
String sortExpression = e.SortExpression + " " + e.SortDirection.ToString();
this.SortExpression = sortExpression.Replace("Ascending", "ASC").Replace("Descending", "DESC");
}
#endregion
#region " Handle: Paging "
protected void HistoryList_DataBound(object sender, EventArgs e)
{
HistoryPager.Visible = (HistoryPager.PageSize < HistoryPager.TotalRowCount);
}
protected void HistoryPager_PreRender(object sender, EventArgs e)
{
if (HistoryDataTable == null)
{
HistoryDataTable = xmlData.GetDataTable(Server.MapPath("~/App_Data/history.xml"), "Event");
}
if (!String.IsNullOrEmpty(SortExpression))
{
HistoryDataTable.DefaultView.Sort = SortExpression;
}
HistoryList.DataSource = HistoryDataTable;
HistoryList.DataBind();
}
#endregion
Сортировка пока не работает.
это НЕ вопрос mvc –