ListArticles.Sortable.aspx
<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="ListArticles.Sortable.aspx.vb"
Inherits="SortableFileEntries.ListArticleSortable"%>
<form runat="server" ID="Form1">
<asp:DataGrid runat="server" id="articleList" Font-Name="Verdana" AutoGenerateColumns="False"
AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="Navy"
HeaderStyle-ForeColor="White" HeaderStyle-Font-Size="15pt"
HeaderStyle-Font-Bold="True"
AllowSorting="True" OnSortCommand="sortDisplay">
<Columns>
<asp:HyperLinkColumn DataNavigateUrlField="Name" DataTextField="Name"
HeaderText="File Name" SortExpression="FileName" />
<asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time"
ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}"
SortExpression="LastWriteTime" />
<asp:BoundColumn DataField="Length" HeaderText="File Size"
ItemStyle-HorizontalAlign="Right"
DataFormatString="{0:#,### bytes}"
SortExpression="Length" />
</Columns>
</asp:DataGrid>
</form>
Code-Behind Class
Imports System.Collections
Imports System.IO
Public Class ListArticleSortable
Inherits System.Web.UI.Page
Protected WithEvents articleList As System.Web.UI.WebControls.DataGrid
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
If Not Page.IsPostBack Then
BindData(CompareByOptions.FileName)
End If
End Sub
Private Sub BindData(ByVal compareMethod As CompareByOptions)
Dim dirInfo As New DirectoryInfo(Server.MapPath(""))
Dim fileInfoArray() As FileInfo = dirInfo.GetFiles("*.aspx")
Array.Sort(fileInfoArray, New CompareFileInfoEntries(compareMethod))
articleList.DataSource = fileInfoArray
articleList.DataBind()
End Sub
Public Sub SortDisplay(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs)
Select Case e.SortExpression
Case "FileName"
BindData(CompareByOptions.FileName)
Case "LastWriteTime"
BindData(CompareByOptions.LastWriteTime)
Case "Length"
BindData(CompareByOptions.Length)
End Select
End Sub
End Class
Public Enum CompareByOptions
FileName
LastWriteTime
Length
End Enum
Public Class CompareFileInfoEntries
Implements IComparer
Private compareBy As CompareByOptions = CompareByOptions.FileName
Public Sub New(ByVal cBy As CompareByOptions)
compareBy = cBy
End Sub
Public Overridable Overloads Function Compare(ByVal file1 As Object, ByVal file2 As Object) _
As Integer Implements IComparer.Compare
'Convert file1 and file2 to FileInfo entries
Dim f1 As FileInfo = CType(file1, FileInfo)
Dim f2 As FileInfo = CType(file2, FileInfo)
'Compare the file names
Select Case compareBy
Case CompareByOptions.FileName
Return String.Compare(f1.Name, f2.Name)
Case CompareByOptions.LastWriteTime
Return DateTime.Compare(f1.LastWriteTime, f2.LastWriteTime)
Case CompareByOptions.Length
Return f1.Length - f2.Length
End Select
End Function
End Class
|