При наличии достаточного количества свободного времени можно сделать что угодно, даже сортируемый репитер
Код | <asp:Repeater ID="Repeater1" runat="server" > <HeaderTemplate> <table border="1" width="500px" > <tr> <td> <asp:LinkButton runat="server" ID="HeaderFirstNameLinkButton" CommandArgument="FirstName" Text="First Name" OnClick="Repeater1_OnSorting" /> </td> <td> <asp:LinkButton runat="server" ID="HeaderLastNameLinkButton" CommandArgument="LastName" Text="First Name" OnClick="Repeater1_OnSorting" /> </td> </tr> </HeaderTemplate> <ItemTemplate> <tr style="background-color:White;" > <td><%# Eval("FirstName") %></td> <td><%# Eval("LastName") %></td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr style="background-color:Silver;" > <td><%# Eval("FirstName") %></td> <td><%# Eval("LastName") %></td> </tr> </AlternatingItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater>
|
Код | public partial class WebForm1 : System.Web.UI.Page { private List<Customer> CustomersDataSource { get { return Session["CustomersDataSource"] as List<Customer>; } set { Session["CustomersDataSource"] = value; } }
private SortDirection CurrentSortDirection { get { return (SortDirection)(ViewState["CurrentSortDirection"] ?? SortDirection.Ascending); } set { ViewState["CurrentSortDirection"] = value; } } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { CustomersDataSource = new List<Customer>{ new Customer{ FirstName = "First", LastName = "Первый нах" }, new Customer{ FirstName = "Second", LastName = "Второй и ниипет" }, new Customer{ FirstName = "Third", LastName = "Замыкаю пидистал" } };
Repeater1.DataSource = CustomersDataSource; Repeater1.DataBind(); } }
protected void Repeater1_OnSorting(object sender, EventArgs e) { LinkButton buttonClicked = sender as LinkButton; switch (buttonClicked.CommandArgument) { case "FirstName": if (CurrentSortDirection == SortDirection.Ascending) { CustomersDataSource.Sort(Customer.FirstNameComparisonAscending); } else { CustomersDataSource.Sort(Customer.FirstNameComparisonDescending); } break; case "LastName": if (CurrentSortDirection == SortDirection.Ascending) { CustomersDataSource.Sort(Customer.LastNameComparisonAscending); } else { CustomersDataSource.Sort(Customer.LastNameComparisonDescending); } break; default: return; } CurrentSortDirection = CurrentSortDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending; Repeater1.DataSource = CustomersDataSource; Repeater1.DataBind(); } }
public sealed class Customer { public string FirstName { get; set; } public string LastName { get; set; } public static Comparison<Customer> FirstNameComparisonAscending = (x, y) => Comparer<string>.Default.Compare(x.FirstName, y.FirstName); public static Comparison<Customer> FirstNameComparisonDescending = (x, y) => Comparer<string>.Default.Compare(y.FirstName, x.FirstName); public static Comparison<Customer> LastNameComparisonAscending = (x, y) => Comparer<string>.Default.Compare(x.LastName, y.LastName); public static Comparison<Customer> LastNameComparisonDescending = (x, y) => Comparer<string>.Default.Compare(y.LastName, x.LastName); }
public enum SortingDirection { Ascending = 1, Descending = 2 }
|
На самом деле этот код не представляет практической ценности ввиду наличия такого контрола, как ListView, в котором сортировка уже существует http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui.aspx http://msdn.microsoft.com/en-us/library/bb398790.aspx#SortingDataDisplayedByTheListViewControl
|