You can let the users delete the event using a built-in delete icon, using a context menu or using an active area icon.

JavaScript

Built-In Delete Icon

The monthly calendar component includes a built-in support for a "delete" icon that displays on hover.

The "delete" icon is disabled by default. You can enable it using eventDeleteHandling property.

The calendar will fire onEventDelete and onEventDeleted events on click.

<div id="dp"></div>
<script type="text/javascript">
  const dp = new DayPilot.Month("dp", {
    eventDeleteHandling: "Enabled",
    // ...
  });
  dp.init();
</script>

Demo:

Context Menu

You can add a context menu to the monthly calendar events that will let users delete the event using a special menu item:

<div id="dp"></div>
<script type="text/javascript">
  const dp = new DayPilot.Month("dp", {
    contextMenu: new DayPilot.Menu({
      items: [
        { text:"Delete", onClick: args => dp.events.remove(args.source) }
      ]
    }),
    // ...
  });
  dp.init();
</script>

Custom Delete Icon (Active Area)

You can use event active areas to insert a custom icon at a custom location inside events.

Active areas are only available in the Pro version.

<div id="dp"></div>
<script type="text/javascript">
  const dp = new DayPilot.Month("dp", {
    onBeforeEventRender = function(args) {
      args.e.areas = [
        {
          onClick: args => { dp.events.remove(args.source); },
          top: 3,
          right: 2,
          bottom: 9,
          width: 17,
          visibility: "Hover",
          cssClass": "event_action_delete",
        }
      ];
    },
    // ..
  });
  dp.;
  // ...
  dp.init();
</script>

ASP.NET WebForms

In the legacy CssOnly=false mode an integrated delete [x] icons is also available.

Context Menu

Create a context menu:

<DayPilot:DayPilotMenu ID="DayPilotMenu1" runat="server" CssClassPrefix="menu_default">
  <DayPilot:MenuItem Text="Open" Action="JavaScript" JavaScript="editEvent(e.value());" />
  <DayPilot:MenuItem Text="Delete" Action="Callback" Command="Delete" />
</DayPilot:DayPilotMenu>

Link it to the Scheduler:

<DayPilot:DayPilotMonth 
  ID="DayPilotMonth1" 
  runat="server" 
  ...
  ContextMenuID="DayPilotMenu1" 
/>

The items with Action = "CallBack" will fire EventMenuClick event on the server side:

protected void DayPilotMonth1_EventMenuClick(object sender, EventMenuClickEventArgs e)
{
  // delete the event in the database

  setDataSourceAndBind();
  DayPilotMonth1.Update();
}

Active Area

You can also use active areas.

protected void DayPilotMonth1_BeforeEventRender(object sender, BeforeEventRenderEventArgs e)
{
  e.Areas.Add(new Area().Width(17).Bottom(9).Right(2).Top(3).CssClass("event_action_delete").JavaScript("dpm.commandCallBack('delete', {id:e.value() });"));
}

These sample classes (event_action_delete and event_action_menu) are defined in Themes/areas.css (plus Themes/areas directory) so don't forget to include it.

ASP.NET MVC

You can let the users delete the event using a context menu or using an active area icon. In the legacy CssOnly=false mode an integrated delete [x] icons is available.

Context Menu

You need to define the menu:

@Html.DayPilotMenu("menu", new DayPilotMenuConfig {
  Items = new DayPilot.Web.Mvc.MenuItemCollection
  {
    new DayPilot.Web.Mvc.MenuItem { Text = "Open", Action = MenuItemAction.JavaScript, JavaScript = "editEvent(e.value());"},
    new DayPilot.Web.Mvc.MenuItem { Text = "Delete", Action = MenuItemAction.CallBack, Command = "Delete"}
  }
})

Link it to the Calendar:

@Html.DayPilotMonth("dpm", new DayPilotMonthConfig {
  ...
  ContextMenu = "menu",

The items with Action = MenuItemAction.CallBack will fire OnEventMenuClick on the server side:

protected override void OnEventMenuClick(EventMenuClickArgs e)
{
  switch (e.Command)
  {
    case "Delete":
      new EventManager(Controller).EventDelete(e.Id);
      Update();
      break;
  }
}

Active Area

You can also use active areas. Add the active area to the event using OnBeforeEventRender.

protected override void OnBeforeEventRender(BeforeEventRenderArgs e)
{
  e.Areas.Add(new Area().Width(17).Bottom(9).Right(2).Top(3).CssClass("event_action_delete").JavaScript("dpm.commandCallBack('delete', {id:e.id() });"));
}

protected override void OnCommand(CommandArgs e)
{
  switch (e.Command)
  {
      case "delete":
          string id = (string) e.Data["id"];
          new EventManager(Controller).EventDelete(id);
          Update(CallBackUpdateType.EventsOnly);
          break;
  }
}

These sample classes (event_action_delete and event_action_menu) are defined in Themes/areas.css (plus Themes/areas directory) so don't forget to include it.