DayPilot Month allows custom event sorting inside a single block of overlapping events.

It's available for both the default row stacking mode and the cell stacking mode:

The default sorting rule corresponds to:

start asc, end desc

You can specify a custom sorting expression.

JavaScript

JavaScript uses values of .sort array of DayPilot.Event.data and .sortDirections property to sort the events. 

It can be enabled by specifying the sort directions in .sortDirections.

<div id="dp"></div>
<script type="text/javascript">
  var dp = new DayPilot.Month("dp");
  dp.sortDirections = ["asc", "desc"];
  dp.events.list = [
    {
      start: "2013-03-25T00:00:00",
      end: "2013-03-25T12:00:00",
      id: "123",
      text: "Event 123",
      sort: [1, "Event 123"]
    },
    {
      start: "2013-03-25T00:00:00",
      end: "2013-03-25T12:00:00",
      id: "124",
      text: "Event 124",
      sort: [2, "Event 124"]
    }
  ];
  // ...
  dp.init();
</script>

ASP.NET WebForms

EventSortExpression="priority asc, name desc"

The "priority" and "name" fields must be available in the data source.

ASP.NET MVC

Use EventSortExpression to override the default sorting rule for concurrent events.

You can use custom database fields in the sort expression.

Example

EventSortExpression = "priority asc, name desc";