Sorting custom data objects the easy way

by martin 28. September 2009 22:32

I recently had to implement custom sorting on couple of ASP.net pages that had to bind to a collection of custom data objects.  Not wanting to re-invent the wheel on every page, I looked for an easier solution online.  I ran across at least two worth mentioning: Generic Sorting Using Reflection in .NET By Jon Wojtowicz (http://www.eggheadcafe.com/articles/pfc/propertycomparer.asp) and Rocky Lhotka's MSDN article where he presents his Generics based PropertyComparer.  I liked Jon's solution in that it was written using recursion so that you could easily sort by properties of properties.  However Jon's implementation was not "Generics" based.  Rocky's implementation was generics based, but it lacked the recursion that my solution needed.  In the end, I ended up modifying Jon's code to be generics based.  I sent Jon an email asking for permission to share his modified code online, but unfortunately he never responded to my email.

Below is a link to my patch file to Jon's PropertyComparer.cs file.  You can download the original directly from Jon's project hosted on EggHeadCafe in the link above.

PropertyComparer.patch (2.99 kb)

Here is an example of how you would use this to support sorting in a Telerik RadGrid:

        protected void RadGrid1_SortCommand(object source, GridSortCommandEventArgs e)
        {
            List<Employee> employees = (List<Employee>)RadGrid1.DataSource;
            CompareOrder cmpOrder;
            GridSortExpression expression = new GridSortExpression(); 

            if (e.NewSortOrder.Equals(GridSortOrder.Ascending))
            {
                cmpOrder = CompareOrder.Ascending;
                expression.SortOrder = GridSortOrder.Ascending;
            }
            else
            {
                cmpOrder = CompareOrder.Descending;
                expression.SortOrder = GridSortOrder.Descending;
            }

            employees.Sort(new PropertyComparer<Employee>(e.SortExpression, cmpOrder));

            expression.FieldName = e.SortExpression;

            e.Item.OwnerTableView.SortExpressions.Clear();
            e.Item.OwnerTableView.SortExpressions.AddSortExpression(expression);
            e.Item.OwnerTableView.Rebind();
            e.Canceled = true;
        } 
 

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , ,

ASP.Net | C#

Anonymous HTTP PUT with IIS 7

by martin 22. June 2009 21:32
From googling around in trying to get HTTP put enabled on IIS 7, I have concluded that turning on HTTP PUT verb support requires the installation of the WebDAV handler extension and that even then it only works in integrated authentication mode.  If this is not true, please let me know as I was forced to write my own put HTTP handler.  It actually turned out to be a lot easier than I thought it was going to be though.  Implementing IHttpHandler, I ended up just having to binaryread the request into a byte array and then use a binarywriter to write it to a file after validating the PhysicalPath of the request for user permissions and validating that the "pattern" is safe (ex. file extension, path).  I haven't tested the performance against the IIS 6 native solution, but it seems quite fast on today's server hardware.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

ASP.Net | C# | Windows

Simple Web Application Stress Test Utility

by martin 19. June 2009 21:25

I was recently involved in migrating a web application from IIS 5 to IIS 7 on Server 2008.  One of the quintessential components to this app was originally written as a VC++ ISAPI server extension.  I've read many articles touting the efficiency of the integrated .Net pipeline in IIS 7, so I thought I would rewrite this legacy component in C# as an Http handler instead.  Once the code was written, I was looking for a way to test the speed of the old implementation versus the new.  To my surprise, there were very few free tools available to do this type of testing easily and quickly.  Microsoft offers two tools, Web Application Stress Tool and Web Capacity Analysis Tool.  Both were a complete disappointment for me.  WAST seems like it hasn't been updated or recompiled for years, and I couldn't even get it to install without errors on Windows 2008 x64.  WCAT installed, but it offers no GUI and seemed buggy.  So being the geek that I am, I wrote my own.

The tool that I wrote lets you enter multiple URLs to test and allows you to control the number of concurrent requests (threads) that attempt to retrieve the URLs.  You can also specify if you would like the URLs to be requested in a round-robin fashion or randomly.  Statistics are then displayed for all the requests, and per each URL.  Stats given include: the average number of bytes in response, the average round trip request-response time in milliseconds, requests per second, the total number of requests, and the total elapsed time.

This application was written in C# and it requires .Net 2.0+ or Mono 2.0+ to run.  It is available free of charge via the download link below, but if you find it useful, please feel free to donate a few bucks via the paypal link at the top right of this page.

 Download: SimpleMultiThreadedWebStressTester.exe (18.50 kb)



Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

C# | Linux | Mono | Windows

Update on site rebuild

by martin 27. August 2008 01:26
Update - I just added a page for the PIV and for my open source AJAX World Web Chat Client and web services Server.

Currently rated 3.7 by 3 people

  • Currently 3.666667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

AJAX | ASP.Net | C# | JavaScript | PIV

Welcome

Please contact me if you have a great idea for a project and need technical expertise in designing, developing, or integrating a custom software solution. 

Recent Comments

Comment RSS